» TeamX (Архив Форума)«


Форум TeamX » Тех. поддержка » Стартовая карта (несколько важных вопросов)

Переход по темам
<< Пред. След. >>
Единственная страница этой темы

 
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
 

Переход по темам
<< Пред. След. >>
Единственная страница этой темы


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com