|
Ghost201087
Пользователь
Откуда: Незалежна Рохлянд ... Регистрация: Июль 2007
Всего: 5 сообщений
|
Доброе время суток всем! У меня такой вопрос: Где прописана стартовая карта, она же "ARTemple.map", я так понимаю, что это где то в двиге. Или же я не прав. Если моя догадка верна. То не могли бы многоуважаемые господа форумчане подсказать адрес смещения. И вообще возможно ли изменить ее на свою собственную? Заранее премного благодарен.
----- Сам факт существования существуемого, еще не доказывает, что существование существуемого существует на самом деле...
|
Отправлено: 12:21 - 26 Июля, 2007
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
0x107AC8 - artemple.map название своей карты должно быть такой же длинны P.S. На сайте же есть дока по оффсетам! Смещения в движке
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 12:54 - 26 Июля, 2007
|
|
Ghost201087
Пользователь
Откуда: Незалежна Рохлянд ... Регистрация: Июль 2007
Всего: 5 сообщений
|
Ray Спасибо огромное. Только я что то такой доки раньше не видел, ну да ладно, впредь надо быть повнимательней!
----- Сам факт существования существуемого, еще не доказывает, что существование существуемого существует на самом деле...
|
Отправлено: 14:29 - 26 Июля, 2007
|
|
eol
Пользователь Регистрация: Март 2008
Всего: 6 сообщений
|
Извиняюсь за возрождение старой темы.
Цитата: Quote: from Ray on 12:54 - 26 Июля, 2007 ... название своей карты должно быть такой же длинны ...
Хочу заметить, что имя файла может быть как короче так и длиннее. Изначально там имя artemple.map длиною 8 символов. Я тестировал с именами от 1 до 16 символов и игра запускалась нормально. Неизвестно только как это может повлиять на другие аспекты игры.
|
Отправлено: 2:27 - 28 Марта, 2008
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Короче -- это пожалуйста, лишь бы был ноль в конце. А вот длиннее... "меня терзают смутные сомненья"
|
Отправлено: 8:19 - 28 Марта, 2008
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
16 символов вместе с последним нулём? В принципе ты прав. Ближайшая переменная, используемая двигом, находится по смещению 0x10 относительно начала имени карты. Поэтому теоретически под имя отведено 0x10 байт (15 символов на имя и 1 байт - конец слова). Но 100% гарантии тут быть не может. Поэтому если уж так надо использовать длинное имя - используй sfall Там такое можно сделать без багов.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 9:52 - 28 Марта, 2008
|
|
eol
Пользователь Регистрация: Март 2008
Всего: 6 сообщений
|
Цитата: Quote: from Ray on 9:52 - 28 Марта, 2008 16 символов вместе с последним нулём? В принципе ты прав. Ближайшая переменная, используемая двигом, находится по смещению 0x10 относительно начала имени карты. Поэтому теоретически под имя отведено 0x10 байт (15 символов на имя и 1 байт - конец слова). Но 100% гарантии тут быть не может. Поэтому если уж так надо использовать длинное имя - используй sfall Там такое можно сделать без багов.
Не совсем так, 16 символов на имя + расширение с точкой + ноль окончания сторки = 21 байт Если имя будет 17 символов (22 байта) то тогда уже не загружается никакой карты. Посмотрел на sfall - чего только люди не творят, мне даже стыдно за свои ламерские выкрутасы. По идее, имя должно быть не более 11 символов (16 байт), но в цикле чтения длина имени никак не проверяется.
|
Отправлено: 15:04 - 29 Марта, 2008 | ИСПРАВЛЕНО: eol - 15:45 - 29 Марта, 2008
|
|
binyan
Пользователь
Откуда: Israel Регистрация: Март 2005
Всего: 292 сообщения
|
ЕМНИП если имя файла длиннее 8 символов, то он просто не отображается в маппере.
----- ...выражая озадаченность, граничащую с озабоченностью..
|
Отправлено: 15:43 - 29 Марта, 2008
|
|
eol
Пользователь Регистрация: Март 2008
Всего: 6 сообщений
|
Цитата: Quote: from binyan on 15:43 - 29 Марта, 2008 ЕМНИП если имя файла длиннее 8 символов, то он просто не отображается в маппере.
Уважаемый, не знаете - не говорите!
|
Отправлено: 15:53 - 29 Марта, 2008
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
По смещению в 0x10 байт от начала имени находится переменная, которая неоднократно используется двигом. Точнее: Перед началом выполнения переменная просто получает указатель на адрес в памяти с именем карты. mov eax,0x5194c8; call 0x480d4c; а ф-ия уже грузит карту. С этим всё понятно. Но в свою очередь в памяти есть int переменная, которая имеет адресс 0x5194d8 и неоднократно используется. Если точнее, то в момент создания карты (но скорее всего где-то ещё). И если имя будет больше 16 байт (вместе с последним нулём) - мы 100% при старте карты обнулим эту переменную в памяти, а значит и изменим имя стартовой карты. И я не поленился и проверил карту с именем в 19 байт и несколько раз гарантированно словил вылет (и ничуть этому не удивился). В доказательство могу привести код с комментариями. EDIT: P.S. Ах, да. Совсем забыл добавить. Вылет будет если загружать новую игру второй раз. Т.к. при первой загрузке имя мы уже получили, а во время выполнения ф-ии загрузки эта переменная как-раз и обнуляется. Попробуй
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 16:11 - 29 Марта, 2008 | ИСПРАВЛЕНО: Ray - 15:31 - 29 Марта, 2008
|
|
eol
Пользователь Регистрация: Март 2008
Всего: 6 сообщений
|
Насчет функции загрузки карты полностью согласен. Да, после второй загрузки начинаются глюки (вылета не словил). Когда я тестировал с именами больше 11 символов (16 байт), то не додумался начать заново во второй раз, а посмотреть код не удосужился, поэтому так и написал. К переменной по смещению в 0x10 байт от начала имени во всей игре идет только одно обращение для сравнения и 2 записи нулевых значений. Так что ее можно использовать как конец слова. Итого: максимальная длина имени стартовой локации увеличена с 8 до 12 символов (17 байт с нулем). Согласны? P.S. Ray, а куда писать, если нашел ошибку в документации по оффсетам?
|
Отправлено: 17:23 - 29 Марта, 2008 | ИСПРАВЛЕНО: eol - 18:02 - 29 Марта, 2008
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Нет. Не согласны. 16 байт с нулём. Никак не 17. 0x11 это младший байт той самой переменной. Что касаемо той переменной. Да, я согласен, что она используется 3 раза (один раз для сравнения и два раза для записи). Код я как раз смотрел. Но не зря написал, что "но скорее всего где-то ещё" Ты дизассемблер. код смотрел? А что если обращение к ней идёт не напрямую? А начиная с определённого адреса и через каждые n-байт? Это мало вероятно, но мало-ли P.S. Мне на мыло.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 18:26 - 29 Марта, 2008 | ИСПРАВЛЕНО: Ray - 17:26 - 29 Марта, 2008
|
|
binyan
Пользователь
Откуда: Israel Регистрация: Март 2005
Всего: 292 сообщения
|
Цитата: Quote: from eol on 15:53 - 29 Марта, 2008 Уважаемый, не знаете - не говорите!
Я же написал ЕМНИП (если мне не изменяет память). А она изменила. Это со скриптами так.
----- ...выражая озадаченность, граничащую с озабоченностью..
|
Отправлено: 18:56 - 29 Марта, 2008 | ИСПРАВЛЕНО: binyan - 18:57 - 29 Марта, 2008
|
|
eol
Пользователь Регистрация: Март 2008
Всего: 6 сообщений
|
Цитата: Quote: from Ray on 18:26 - 29 Марта, 2008 Нет. Не согласны. 16 байт с нулём. Никак не 17. 0x11 это младший байт той самой переменной. ... Ты дизассемблер. код смотрел? А что если обращение к ней идёт не напрямую? А начиная с определённого адреса и через каждые n-байт? Это мало вероятно, но мало-ли P.S. Мне на мыло.
Хорошо, пусть будет 11 символов - 16 байт. Код в дизассемблере смотрел. Нигде не нашел обращения в цикле. Письмо написал.
Цитата: Quote: from binyan on 18:56 - 29 Марта, 2008 Я же написал ЕМНИП (если мне не изменяет память)...
Извините, не силен в таких сокращениях.
|
Отправлено: 20:20 - 29 Марта, 2008 | ИСПРАВЛЕНО: eol - 20:22 - 29 Марта, 2008
|
|
|
|