Автор Тема: Плавание в GTA 3  (Прочитано 5512 раз)

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Плавание в GTA 3
« : Декабрь 26, 2015, 12:58:52 pm »
Знаю, что в GTA 3 уже мало кто играет, но всё-же. Я решил запилить плавание и у меня уже есть пара наработок, однако не хватает одного адреса: условие того, что игрок в воде и функции движения игрока вперёд.

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

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

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



Так что, осталось дело за малым.
« Последнее редактирование: Декабрь 26, 2015, 08:20:41 pm от xanser »

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #1 : Декабрь 26, 2015, 08:39:27 pm »
Лично я по тройке не подскажу, но для движения вперед можно проверить нажатие игровой кнопки, отвечающей за газ в машине/движение пешком.

А вот по вайсу есть интересный момент, связанный с плаванием. Как-то тестировал опкод, который отключает утопление томми, и можно преодолеть водную преграду, еле-еле перемещая игрока, естественно без анимации. Видимо разрабы предполагали плавание допилить.

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #2 : Декабрь 26, 2015, 10:51:46 pm »
Прямо таки можно было перемещать игрока с клавишами движения? Или он плыл сам по себе?

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #3 : Декабрь 26, 2015, 11:03:17 pm »
Dimzet дал адрес проверки, если игрок в воде: 006FB49C+54 pointer 4 bytes. Так что, осталось дело за малым.

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #4 : Декабрь 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.

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #5 : Декабрь 28, 2015, 09:31:47 pm »
У меня этот опкод вылетает  :(

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Плавание в GTA 3
« Ответ #6 : Декабрь 29, 2015, 05:41:01 pm »
его в трехе просто нет

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #7 : Декабрь 29, 2015, 09:55:34 pm »
Так на вайсе вылетает же.

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #8 : Декабрь 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

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Плавание в GTA 3
« Ответ #9 : Декабрь 30, 2015, 03:56:28 pm »
Так на вайсе вылетает же.
Хз, у меня в вайсе всё ок работает - у игрока в воде не отнимается здоровье.

Еще полезный опкод проверяет в воде игрок или нет 04AD: is_actor_in_water $PLAYER_ACTOR
Этот тоже, кстати, в трехе отсутствует

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #10 : Декабрь 31, 2015, 11:39:50 am »
На основе адресов выше можно создать такие опкоды и для GTA 3. Вот только я не знаю как из создавать.

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #11 : Декабрь 31, 2015, 12:04:48 pm »
Хм, опкод вроде заработал. Оданко, я не могу изменить камеру в воде:
"gta-vc.exe"+3E481C 4b = 23
по стандарту, когда игрок на суше она = 4.

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Плавание в GTA 3
« Ответ #12 : Декабрь 31, 2015, 04:40:11 pm »
Мб
Camera.OnPed($PLAYER_ACTOR, 0, 2)в цикле поможет... Или сразу
Camera.OnPed($PLAYER_ACTOR, 0, 2)
Camera.SetBehindPlayer

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Плавание в GTA 3
« Ответ #13 : Январь 02, 2016, 01:22:22 am »
Что-ж, ладно. Я уже начал писать CLEO скрипт, и вот что у меня получилось:

! No longer available


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

0x4698DE - нужно поставить nop на этот адрес. Когда я пытаюсь это сделать - игра крашится, хотя когда я делаю тоже самое с Cheat Engine - камера становиться нормальной. Сделал с помощью опкода, меньше мороки.
Ну и осталось последнее - сделать движение в воде.
« Последнее редактирование: Январь 02, 2016, 10:01:17 am от Tommi4kaVar4etti »