You are not logged in.
это я так понял .lst файлы? Для чего они?
Изначально Sage задумывался как инструмент для перевода, поэтому была создана возможность работать с текстом для конкретной миссии (без учёта того, как разбросан текст миссии по файлу). Просто скидываем имена (по одному на строку) в lst файл и открываем - включается "режим списка". В этом режиме можно также импортировать/экспортировать текст (только указанный в списке).
Готовых таблиц для русифицированного gxt GTA 4 (1С) нет?
English - с исправленным знаком (R)
Russian - 1С (возможны мелкие недочёты)
Как соотносятся названия Surface-Air GXT Editor в заголовке и SA GXT Editor в About? Какому верить? И что такое Surface-Air?
В смысле летает , как ракета
"Подбор имени" приколол. Занятие для терпеливых
А это на случай типа:
NAME_03 0a14f6e9 NAME_05
где можно попробовать имя NAME_04.
да, и совсем забыл, на Висте 64/СП1/РУС есть небольшой глюк с шрифтом в центральном списке
Это с выбранной кириллической кодировкой?
4)Локализация Xbox360 версии от неизвестных авторов (текст от ПК 1С, но новые шрифты и транслитерация)
Это, наверное, от того типа, которого постоянно пинают на гтафорумс
Обновлённая версия редактора Sage: sage-097b.zip
* Открывает и сохраняет GXT файлы версий GTA III, GTA: Vice City, GTA: San Andreas, GTA IV.
* Поддерживает [де]кодирование строк (aka локализованные файлы)
* Редактирование таблицы [де]кодирования в самой программе
* Импорт/экспорт текста (текущая таблица)
* Работа в режиме списка (с виртуальной таблицей - "сценарием", собранной по списку ключей)
* Поиск по строке, ключу или хэшу ключа
Прилагается:
* Почти полный список ключей из GTA:SA
* Неполный список ключей из GTA IV
* Примеры списков (сценариев) для GTA:SA и GTA IV
PS: Во время редактирования таблицы декодирования производится автоматический обмен символов для обеспечения обратного кодирования.
Например, при замене М на 4, четвёрка будет автоматически заменена на М
При загрузке таблицы декодирования результат показывается автоматически, а при ручном редактировании нужно нажимать кнопку "Применить"
@Seemann - диск уже куплен, описания сцен выдраны, скрипты декомпилированы
Сейчас переписываю редактор, чтобы поддерживал все версии gxt, начиная с gta1 gta3 (можно было бы наштамповать под каждую версию свой, но это неудобно). Версия файла определяется автоматически (уже).
[small]*уходит, бормоча: так, наверно 32 байта на имя строки будет достаточно...*[/small]
@AleX AciD - А ты не планируешь заняться восстановлением ключей GXT, как ты делал это для SA? Это было очень полезно.
Планирую, только сначала куплю диск с игрой.
[small]Всё, что у меня сейчас есть - это два перевода и exe-шник *кхе-кхе*вылеченный*кхе-кхе*[/small]
Edit: твоей программе не хватает списка последних открытых файлов.
*записывает в блокнот*
Для справки: в качестве алгоритма хэширования R* теперь используют не CRC32, а Jenkins One-at-a-time hash.
А вот за это отдельное спасибо! Я так понимаю и строки (ключи) теперь не по восемь байт?
Регистратор функций для скриптов:
s_7E5A80_register_script_fns сам регистратор s_583420_reg_scr_fn регистрация одной функции - параметры: имя функции и адрес функции-обработчика
вызывает регистраторы категорий:
s_B40840_regscr_audio s_BA1350_regscr_camera s_B9DAF0_regscr_debug s_B9CB70_regscr_text_hud надписи, радар s_B961E0_regscr_misc_math_secur разное, мат.функции, секуром s_B92290_regscr_input клавиатура, мышь s_B8F400_regscr_pedchar актеры s_B7E7C0_regscr_player s_B7A2E0_regscr_pedtask задачи актеров s_B6D2D0_regscr_vehicle транспорт s_B62C00_regscr_object объекты, pickup'ы s_B5A180_regscr_extscript внешние скрипты s_B59BD0_regscr_stat s_B58D50_regscr_streaming загрузка/выгрузка ресурсов s_B57C00_regscr_path s_B54390_regscr_weapon s_B53410_regscr_fire_expl огни, пожары, взрывы s_B52910_regscr_zone s_A09DA0_regscr_gfx маркеры, эффекты, рисование s_B52170_regscr_gang s_B52090_regscr_cutscene s_B51CA0_regscr_time дата/время s_B50940_regscr_net сеть
ещё один регистратор (вызывается отдельно):
s_584260_reg_scr_timer_math таймеры, мат.функции (снова?)
Удобно, теперь все функции скриптов с именами, не нужно гадать, что это за функция...
@listener - Спасибо, а не найдётся ещё gxt (american и russian) из того же комплекта?
Выложенные шрифты - из американской версии?
Всё отлично, но нет редактора новых таблиц перекодировки как в sagxtedit. Например открыть russian.gxt от 1C в твоём редакторе проблема, а в sagxtedit для создания новой таблицы перекодировки уходит максимум 15 минут, но там нет импорта/экспорта текста...
Встроенного редактора нет, таблицу надо писать в блокноте (пример таблицы идёт в комплекте), сохранять с расширением tbl.
Формат таблицы простой - построчно код символа (шестнадцатеричный) на текстуре (ASCII-код - 0x20), и буква, соответствующая ему при редактировании:
21=А <- русские буквы 22=В 23=С 25=Е 28=Н 2b=К 2d=М 2f=О ...
Но выложенная версия написана под SA (точнее под его особенности кодирования символов), поэтому [де]кодирование (пока) работать не будет.
Кто-нибудь может выложить текстуры шрифтов в обычных форматах (TGA/BMP/GIF/JPG) ?
Нужно смотреть, что они выкинули на этот раз...
AleX AciD wrote:пробовали нажимать на иконку в окне "О программе"?
Да, а че том необычного?
Это была реклама пасхалки
редактор от AleX AciD (SAGE)
Че-то нет его нигде ... А там редактор таблиц есть?
О, программа потихоньку расползается...
Вообще давно надо было куда-нибудь выложить, да всё руки не доходили...
Пользуясь случаем, выкладываю тут:
http://public.sannybuilder.com/tools/sage09.zip
PS: А вы пробовали нажимать на иконку в окне "О программе"?
Хорошая новость - формат gxt файлов совсем не изменился со времен сан-андреаса
PS: Rockstar - "мы признаем, что у игроков есть проблемы с GTA 4..."
http://gta-real.com/news/2008-12-08-588
(Между строк: "мы так наварились на приставочной версии, что нам абсолютно положить на писишников...")
Игра действительно тормозит на новейших компьютерах?
А в чем конкретно отличия загрузчика от Alexander'ского? Кроме конечно внешнего вида настроек аудиопараметров каждой машины, хотя они тоже похожи
+ параметры представлены таблицей (что облегчает сравнение параметров, в т.ч. неизвестных)
- редактируются параметры машин только с id от 400 до 630 (другие недоступны)
:wow:
Файл залился нулевого размера (из-за недонастроенной локальной сети).
Перезалил туда же.
Залил на public свою версию загручика аудио-параметров машин (ASI-plugin).
- Используется табличный файл конфигурации a-la handling.cfg
- Прилагается оптимизированный ASI-loader (3 kb)
Ссылка: http://public.sannybuilder.com/saVehAudio_080201.zip
Решение:
В файле style/Radium.css изменить последний стиль:
DIV.code1 { OVERFLOW: hidden; PADDING: 0px; }
После него добавить этот стиль:
DIV.code1 PRE { WIDTH: 98%; OVERFLOW: auto; FONT-SIZE: 11px; FONT-FAMILY: Courier New; COLOR: #000000; BACKGROUND-COLOR: lightyellow; PADDING: 5px; BORDER: rgb(190,190,190) 1px dotted; }
А также поправить движок форума, чтобы вместо
<DIV class=code1 style="HEIGHT: 13.5em"><PRE>
выдавалось:
<DIV class=code1><PRE style="HEIGHT: 13.5em">
Протестировано в IE 6, Firefox 2 и Opera 9. :good:
edit:
Решение основано на версии форума от 30.01.2008
Можно поставить в блок "Код" горизонтальную прокрутку?
Когда текст не помещается, очень неудобно, его никак не прокрутить.
Переменная
dword_859D9C -> fFive ;ext. script trigger def. radius
хранит 5.0 - радиус, используемый по умолчанию, при регистрации внешних скриптов-триггеров опкодами 0928 и 0929.
Функции
sub_43D6A0 -> reset_player_destroyed_model_counters sub_46A930 -> init_external_script_trigger // находит свободный элемент массива и заполняет его sub_46A8C0 -> init_ext_script_triggers // инициализирует массив структур ext_script_triggers dummy_46B260 -> __init_ext_script_triggers // вызывает предыдущую .text:0084A740 unknown_libname_128 -> _init_script_triggers // вызывает предыдущую
Переменная
stru_A90CF0 -> ext_script_triggers
- массив структур extScriptTrigger (размером по 0x14 байт) в количестве 70 (0x46) штук.
Структура
00000000 extScriptTrigger struc ; (sizeof=0x14) 00000000 script_index dw ? 00000002 is_object db ? ; 1: object, 0: actor 00000003 type db ? 00000004 field_4 db ? 00000005 __pad db 3 dup(?) 00000008 radius dd ? ;; <- float 0000000C model dw ? 0000000E priority dw ? 00000010 field_10 dd ? 00000014 extScriptTrigger ends
хранит информацию о внешнем скрипте-триггере (заполняется опкодами 0928 и 0929)
PS:
Функция
.text:0084A740 unknown_libname_128 -> _init_script_triggers
входит в большую таблицу функций, начинающуюся с адреса 0x008A4000. Это, случаем, не "основной класс игры" (CGame) ?
03c8=0,rotate_player-180-degrees
действует аналогично 0373: set_camera_directly_behind_player, только камера размещается перед игроком, а не за ним, поэтому более подходящее название для него:
03c8=0,set_camera_directly_before_player
Ранее неизвестный:
0822=1,set_bumper_camera_available %1d%
параметр равный:
0 - делает недоступной камеру "вид с бампера" и переключает камеру на "вид со средней дистанции".
1 - делает камеру доступной (без переключения вида)
вообще-то 4 - это среда 1 января 1992 года было средой (время начала игры). Кстати, внутриигровой год тоже високосный (в феврале 29 дней, см. 008CCF24 MonthsDays).
Точно, у них же неделя начинается с воскресенья
Несколько функций:
sub_50BD40 -> camera_set_behind_player // поставить камеру за игроком sub_50BD70 -> camera_set_before_player // поставить камеру перед игроком sub_4414C0 -> time_increase_by_minutes // добавить X минут к текущему времени
PS:
Мне кажется, или это жестко запрограммированый "вылет" из игры?
.text:00484BD6 xor eax, eax .text:00484BD8 or byte ptr [eax+1Eh], 4
Пара функций:
sub_56E580 - set_player_wasted sub_56E5D0 - set_player_busted
Устанавливают состояние переменной wasted_busted в структуре игрока (wasted = 1, busted = 2).
edit:
Функция
sub_52CD90 -> init_game_time
устанавливает текущее игровое время/дату как Четверг, 01 Января 12:00:00
несколько переменных:
byte_B70144 -> _isTimeSaved byte_B7014D -> _savedMonth byte_B7014C -> _savedMonthDay word_B70148 -> _savedSeconds byte_B7014E -> _currentWeekDay
edit2:
Функция
sub_55C0C0 -> init_stats
инициализирует статистику (задает начальные значения, читает AR_STATS.DAT , STATDISP.DAT)
8-байтовый буфер
dword_B78A00 -> _gxtLastMissionPassed dword_B78A04 -> _gxtLastMissionPassed_2nd_part
хранит gxt-ключ имени последней пройденной миссии
Сделал модификатор трафика на дорогах (в зависимости от времени суток, с увеличенным уровнем в городах).
Используется два потока (можно обойтись и одним, просто лень переписывать )
// put your create_thread commands here create_thread @TIME_WATCH create_thread @TRAFFIC_MOD
Один поток просто следит за временем и устанавливает "сигнальные" переменные:
// time intervals :TIME_WATCH thread 'TIME' var $TIME_HOURS: Integer $TIME_MINS: Integer $TIME_MS: Integer $LAST_HOUR: Integer $LAST_MIN: Integer $IS_NEXT_HOUR: Integer $IS_NEXT_5MIN: Integer $IS_NEXT_MIN: Integer end 00BF: $LAST_HOUR = current_time_hours, $LAST_MIN = current_time_minutes while TRUE wait 200 00BF: $TIME_HOURS = current_time_hours, $TIME_MINS = current_time_minutes 01BD: $TIME_MS = current_time_in_ms $IS_NEXT_HOUR = FALSE $IS_NEXT_MIN = FALSE $IS_NEXT_5MIN = FALSE if not $LAST_HOUR == $TIME_HOURS then $IS_NEXT_HOUR = TRUE // срабатывает каждый час end $LAST_HOUR = $TIME_HOURS if not $LAST_MIN == $TIME_MINS then 0006: 0@ = $TIME_MINS 0006: 1@ = 0@ 0@ /= 5 // 17 / 5 = 3 20 / 5 = 4 (целочисленное деление) 0@ *= 5 000E: 1@ -= 0@ // 17 - ((17 / 5) * 5) = 2 20 - ((20 / 5) * 5) = 0 if 1@ == 0 // если остаток от деления минут на 5 равен нулю then $IS_NEXT_5MIN = TRUE // срабатывает каждые 5 минут end $IS_NEXT_MIN = TRUE // срабатывает каждую минуту end $LAST_MIN = $TIME_MINS end end_thread
Второй контролирует трафик по такой схеме:
время: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 уровень: 0.1 | 0.09 |0.1 0.2 0.4| 1.0 | 0.6 | 1.0 | 0.6 |0.4 0.2
// traffic modifier, based on current time :TRAFFIC_MOD thread 'TRAFFIC' var $trafic_multiplier: Float $traffic_density: Float end $IS_NEXT_HOUR = TRUE while TRUE wait 100 if $IS_NEXT_HOUR == TRUE then if $TIME_HOURS == 0 then $trafic_multiplier = 0.1 end if and $TIME_HOURS >= 1 $TIME_HOURS <= 3 then $trafic_multiplier = 0.09 end if $TIME_HOURS == 4 then $trafic_multiplier = 0.1 end if $TIME_HOURS == 5 then $trafic_multiplier = 0.2 end if $TIME_HOURS == 6 then $trafic_multiplier = 0.4 end if and $TIME_HOURS >= 7 $TIME_HOURS <= 9 then $trafic_multiplier = 1.0 end if and $TIME_HOURS >= 10 $TIME_HOURS <= 16 then $trafic_multiplier = 0.6 end if and $TIME_HOURS >= 17 $TIME_HOURS <= 19 then $trafic_multiplier = 1.0 end if and $TIME_HOURS >= 20 $TIME_HOURS <= 21 then $trafic_multiplier = 0.6 end if $TIME_HOURS == 22 then $trafic_multiplier = 0.4 end if $TIME_HOURS == 23 then $trafic_multiplier = 0.2 end end if $IS_NEXT_5MIN == TRUE then $traffic_density = $trafic_multiplier if or 0583: player $PLAYER_CHAR in_zone 'LA' // los santos 0583: player $PLAYER_CHAR in_zone 'SF' // san fierro 0583: player $PLAYER_CHAR in_zone 'VE' // las venturas then //01E3: show_text_1number_styled GXT 'NUMBER' number 333 time 1000 style 4 $traffic_density *= 1.5 end 01EB: set_traffic_density_multiplier_to $traffic_density end { // удалить скобку для проверки переменной var $di: Integer $df: Float end $df = $traffic_density $df *= 10.0 008C: $di = float $df to_integer 01E3: show_text_1number_styled GXT 'NUMBER' number $di time 1000 style 2 //} end end_thread
здесь пак клео-скриптов марсика , в нем скрипт traincam.cs )
Спасибо, покопаюсь.
Хорошо , но это `велосипед` , ведь есть же скрипт нормальной камеры поезда с возможностью переключения вида )
А ссылочки не найдется?
А вот хорошо бы сделать так, что бы камера, при движении авто, через N-ое время не разворачивалась, как сейчас. А то приходится переодически мышкой двигать, чтоб камера положение не начала менять.
Да, но мне пока не известно, где находится этот код...
PS: По поводу тоннелей, хотел добавить, что этот недостаток позволяет увидеть работу движка. В частности в тоннеле "имени Market station" происходит отключение рендеринга внешнего мира при въезде и включение при выезде.
Как была отключена динамическая камера для поезда (описание патча):
При включении этой камеры всплывает сообщение "Нажмите NUM4...", id которого - "CINCAM".
В exe-шнике всего 5 функций (показывающих это сообщение) используют этот id, причем все 5 функций, в свою очередь, вызываются в "switch'е" одной функции (sub_527FA0, глядя на граф этой функции можно ужаснуться :wow: ).
После показа сообщения, происходит обращение к какой-то переменной:
.text:0052A71F call sub_526950 ; <-- забито .text:0052A724 mov dx, word_B70140 ; <-- nop'ами .text:0052A72B jmp short loc_52A757
Забивая по очереди вызов функции и обращение к переменной в каждой из пяти ветвей "switch'a", я нашел нужную ветвь.
Еще одна модификация:
- отстреливает динамическую камеру, включающуюся при посадке в поезд (и при его угоне).:cool:
(Но обычного переключения камер все равно нет)
Из-за того, что многие тоннели очень низкие, камера иногда выезжает за потолок.
Патч должен без проблем накладываться на любой из трех вариантов компактного exe (на обычный и на оба моих патча, выложенных выше).
Патч: http://public.sannybuilder.com/GTASA_PA … aincam.zip
edit: все ссылки на патчи исправлены