GTA Builder Форум

GTA Vice City => Моды => Тема начата: SpitFire от Декабрь 26, 2015, 12:58:52 pm

Название: Плавание в GTA 3
Отправлено: SpitFire от Декабрь 26, 2015, 12:58:52 pm
Знаю, что в GTA 3 уже мало кто играет, но всё-же. Я решил запилить плавание и у меня уже есть пара наработок, однако не хватает одного адреса: условие того, что игрок в воде и функции движения игрока вперёд.

Мне немного помогли с уменьшением здоровья в воде, так же я смог нормализовать камеру:

0x4C8489 b = 233
0x4C848A 4b = 164
4698DE 4b = 2425393296

Вот примерный вид того что получилось:

(http://i.imgur.com/1C4fAiB.png)

Так что, осталось дело за малым.
Название: Re: Плавание в GTA 3
Отправлено: xanser от Декабрь 26, 2015, 08:39:27 pm
Лично я по тройке не подскажу, но для движения вперед можно проверить нажатие игровой кнопки, отвечающей за газ в машине/движение пешком.

А вот по вайсу есть интересный момент, связанный с плаванием. Как-то тестировал опкод, который отключает утопление томми, и можно преодолеть водную преграду, еле-еле перемещая игрока, естественно без анимации. Видимо разрабы предполагали плавание допилить.
Название: Re: Плавание в GTA 3
Отправлено: SpitFire от Декабрь 26, 2015, 10:51:46 pm
Прямо таки можно было перемещать игрока с клавишами движения? Или он плыл сам по себе?
Название: Re: Плавание в GTA 3
Отправлено: SpitFire от Декабрь 26, 2015, 11:03:17 pm
Dimzet дал адрес проверки, если игрок в воде: 006FB49C+54 pointer 4 bytes. Так что, осталось дело за малым.
Название: Re: Плавание в GTA 3
Отправлено: xanser от Декабрь 27, 2015, 02:32:34 pm
Вот тот опкод, для перемещения я видимо что-то еще делал.

Код: ASM
  1. 04D8: set_actor $PLAYER_ACTOR drown_in_water 0 (0 = not drown, 1 = drown)

Supports: Vice City, San Andreas
This opcode prevents the actor from drowning in water, including the player, when the flag is set to 0. In Vice City, health will not be depleted when in water. In San Andreas, the actor will be able to swim on its own. The player's lung capacity will never run out.
Название: Re: Плавание в GTA 3
Отправлено: SpitFire от Декабрь 28, 2015, 09:31:47 pm
У меня этот опкод вылетает  :(
Название: Re: Плавание в GTA 3
Отправлено: Shagg_E от Декабрь 29, 2015, 05:41:01 pm
его в трехе просто нет
Название: Re: Плавание в GTA 3
Отправлено: SpitFire от Декабрь 29, 2015, 09:55:34 pm
Так на вайсе вылетает же.
Название: Re: Плавание в GTA 3
Отправлено: xanser от Декабрь 30, 2015, 06:49:34 am
я проверял через scm hook от spookie, игрок в вайсе перестает погружаться и перестает отниматься здоровье, синтаксис такой:

Код: C++
  1. // GameScripting.h
  2. const SCRIPT_COMMAND set_actor_drown_in_water = { 0x04D8, "vi" };   // PLAYER_ACTOR, 0
  3.  
  4. // .cpp
  5. auto PLAYER_ACTOR = (DWORD *) 0x82128C;
  6. ScriptCommand(&set_actor_drown_in_water,PLAYER_ACTOR,0);

Еще полезный опкод проверяет в воде игрок или нет 04AD: is_actor_in_water $PLAYER_ACTOR
Название: Re: Плавание в GTA 3
Отправлено: Shagg_E от Декабрь 30, 2015, 03:56:28 pm
Так на вайсе вылетает же.
Хз, у меня в вайсе всё ок работает - у игрока в воде не отнимается здоровье.

Еще полезный опкод проверяет в воде игрок или нет 04AD: is_actor_in_water $PLAYER_ACTOR
Этот тоже, кстати, в трехе отсутствует
Название: Re: Плавание в GTA 3
Отправлено: SpitFire от Декабрь 31, 2015, 11:39:50 am
На основе адресов выше можно создать такие опкоды и для GTA 3. Вот только я не знаю как из создавать.
Название: Re: Плавание в GTA 3
Отправлено: SpitFire от Декабрь 31, 2015, 12:04:48 pm
Хм, опкод вроде заработал. Оданко, я не могу изменить камеру в воде:
"gta-vc.exe"+3E481C 4b = 23
по стандарту, когда игрок на суше она = 4.
Название: Re: Плавание в GTA 3
Отправлено: Shagg_E от Декабрь 31, 2015, 04:40:11 pm
Мб
Camera.OnPed($PLAYER_ACTOR, 0, 2)в цикле поможет... Или сразу
Camera.OnPed($PLAYER_ACTOR, 0, 2)
Camera.SetBehindPlayer
Название: Re: Плавание в GTA 3
Отправлено: SpitFire от Январь 02, 2016, 01:22:22 am
Что-ж, ладно. Я уже начал писать CLEO скрипт, и вот что у меня получилось:

! No longer available (http://www.youtube.com/watch?v=cfyumIEkZjM#)

Так-же, у меня возникла проблема с нопом адреса с помощью CLEO.

0x4698DE - нужно поставить nop на этот адрес. Когда я пытаюсь это сделать - игра крашится, хотя когда я делаю тоже самое с Cheat Engine - камера становиться нормальной. Сделал с помощью опкода, меньше мороки.
Ну и осталось последнее - сделать движение в воде.