Войти на сайт

Авторизация, ждите ...
×
  • Страница:
  • 1
  • ...
  • 4
  • 5
  • 6
  • 7
  • 8

ТЕМА: Дневник разработчика YuryOl

Дневник разработчика YuryOl 2 мес. 2 дн. назад #106480

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Бог Светлого
  • Сообщений: 686
  • Спасибо получено: 342
Да можно извернуться, но я все равно считаю перспективу мейкера не очень удачной для кого-то высокого.

Давай делай уже скорее, хочу свою зельду на мв слепить.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Дневник разработчика YuryOl 2 мес. 1 день назад #106503

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1069
  • Спасибо получено: 1571
  • 2 место 1 место в ГотвПобедитель конкурса3 место ГотвОраторКомпозиторУчитель
Как поклоннику "Эквилибриума" и боевых сцена в "матрице" (хотя сам фильм не люблю) всегда хотелось добавить динамичности и гибкости в перестрелки в своей АБС.

например [ Нажмите, чтобы развернуть ]


Поэтому многое пытаюсь сделать именно для маневренности героя и динамичности боев

Фиксация направления

Наверное самое легкое что можно придумать, так как такая возможность есть в самом мукере, а значит просто привяжем это к кнопке.
if (Input.isTriggered('capslock')) {
     $gamePlayer._directionFix = !$gamePlayer._directionFix;
}

Блокирование движения

Задача капельку сложнее. Тут нам надо самим добавить свойство, которое позволяет героя поворачиваться не двигаясь. Назовем его isBlockMove
if (Input.isTriggered('v')) {
     $gamePlayer.isBlockMove = !$gamePlayer.isBlockMove;
}

Ну а теперь в стандартной функции moveStraight делаем проверку включено ли это свойство.

1) если нет - позволяем ему (this) идти в заданном напарвлении (d)
Game_Character.prototype.moveStraight.call(this, d)

2) если же свойство есть - разрешаем ему только повернуться
this.setDirection(d)
var YuryolMoveStraight = Game_Player.prototype.moveStraight;
    Game_Player.prototype.moveStraight= function(d) {
        YuryolMoveStraight.call(this);
        ($gamePlayer.isBlockMove) ? this.setDirection(d) : Game_Character.prototype.moveStraight.call(this, d);
    };

Отход назад

Нам надо чтоб герой при нажатии на кнопку резко отсупил допустим на 2 клетки назад. Эта задачка еще сложнее.

1) в основном из-за вымученной функции moveEvent из этого поста: тык

2) Здесь нам понадобится немного иная блокировка - блокируем вообще все движения героя. Для этого создадим новое свойство block и функции для его включения/выключения:
 Game_Player.prototype.disableBlock = function() { 
        this.block = false;
    };
    Game_Player.prototype.enableBlock = function() { 
        this.block = true; 
    };

3) Лезем в функцию Game_Player.prototype.canMove и добавляем в условие проверку включен ли наш "блок")
if ($gameMap.isEventRunning() || $gameMessage.isBusy() || $gamePlayer.block) {
            return false;
        }

4) Конечно же ускорение должно делать героя быстрее. поэтому прибавляем герою скорость на две единицы
$gamePlayer._moveSpeed = $gamePlayer._moveSpeed+2;

5) Итого сама функция ускорения,где
n - количество шагов,на которые пробежит герой
13 - код для ROUTE_MOVE_BACKWARD, т.е. для движения героя назад
Scene_Map.prototype.boost = function(n) {
        $gamePlayer.enableBlock();
        $gamePlayer._moveSpeed = $gamePlayer._moveSpeed+2;
        $gameMap.moveEvent(0, 13, n);
    };

6) Не забываем отключить блокировку движения. Добавляем в moveEvent следующую строчку. Она добавляет в маршрут героя скрипт (код 45) для отключения блока - parameters: ["$gamePlayer.disableBlock();"]
route.list[amount] = {code: 45, parameters: ["$gamePlayer.disableBlock();"], indent: null};

Альтернативное оружие

Об этом завтра, спать хочу :(
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, DK, poca, Cabbit, Doctor_Bug, Varvararara, NeKotZima

Дневник разработчика YuryOl 2 мес. 1 день назад #106504

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Бог Светлого
  • Сообщений: 686
  • Спасибо получено: 342
Никогда не понимал этой темы с фиксацией направления стрельбы. Еще во времена нес уже были твинстик шутеры, хоть на них и нужно было с двух контроллеров играть. Но сейчас-то кнопок хватает. Так что почему бы недобавить твинстик управление? Назначить кнопками стрельбы wasd и все, это всяко удобнее чем лок/анлок направления для игрока.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol, Noxmils

Дневник разработчика YuryOl 2 мес. 1 день назад #106505

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1069
  • Спасибо получено: 1571
  • 2 место 1 место в ГотвПобедитель конкурса3 место ГотвОраторКомпозиторУчитель
Paranoid пишет:
Никогда не понимал этой темы с фиксацией направления стрельбы. Еще во времена нес уже были твинстик шутеры, хоть на них и нужно было с двух контроллеров играть. Но сейчас-то кнопок хватает. Так что почему бы недобавить твинстик управление? Назначить кнопками стрельбы wasd и все, это всяко удобнее чем лок/анлок направления для игрока.

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

Дневник разработчика YuryOl 2 мес. 23 ч. назад #106506

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Бог Светлого
  • Сообщений: 686
  • Спасибо получено: 342
Ну опция такой стрельбы была бы замечательна.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Дневник разработчика YuryOl 2 мес. 20 ч. назад #106512

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1069
  • Спасибо получено: 1571
  • 2 место 1 место в ГотвПобедитель конкурса3 место ГотвОраторКомпозиторУчитель
Блок-схема

Сделал подобие блок-схемы для плагина АБС.

1) код уже довольно внушительный, по блок-схеме легче ориентироваться в функциях

2) позволяет оценить архитектуру плагина. Как видно на схеме - структура иерархична, и при этом между собой подобия "модулей" не слишком связаны, что облегчает работу с плагином.Также внутри "модулей" связь тоже не слишком сильная, в отличии от предыдущих версий плагина, когда чтобы добавить например бумеранг приходилось лезть в функций 6, чтобы ничего не сломать

3) другими цветами помечены функции сторонних плагинов:
- желтым - плагин Пещерного TileSwap
- серым - плагин Амфилохия EventFactory

4) блок-схема отнюдь неполная, здесь только основные функции (около 70ти). На данный момент функций около ста

5) Основа боевой системы:
- проверка нажатия клавиш YuryolInput, после которых и запускается действие героя.
- проверка столкновений collision.
- худ YuryolHud.

6) Описание каждой из функций пока не сделано

Для увеличения нажать правой кнопкой, затем "открыть в другой вкладке"

Последнее редактирование: 2 мес. 20 ч. назад от yuryol.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: idavollr, DK, poca, Doctor_Bug, NeKotZima

Дневник разработчика YuryOl 1 мес. 3 нед. назад #106615

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1069
  • Спасибо получено: 1571
  • 2 место 1 место в ГотвПобедитель конкурса3 место ГотвОраторКомпозиторУчитель
- с оружием в руке герой стреляет вперед, а потом мгновенно - назад. из того же пистолета, не глядя
- с пистолетами в двух руках герой убивает двух врагов впереди, а потом расставив руки в сторону, уничтожает всех по бокам от себя
- с калашом наперевес герой отстреливает противников. внезапно на него нападает чувак сзади, но наш герой фигачит его штык-ножом, не особо отвлекаясь на стрельбу и не меняя оружие
- против танка и пеших сражаться гораздо легче если у тебя оружие с подствольным гранатометом
- и т.д.

Для всего этого в плагин было добавлено альтернативное оружие. По задумке это:
- другой вариант выстрела из этого же оружия. Например,герой из двух пистолетов может стрелять как вперед, таки в стороны.
- дополнительная возможность самого оружия - подствольный гранатомет или альтернативные патроны

Когда-то раньше

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

Для использования этих дополнительных возможностей следовало зажать один из шифтов геймпада при выстреле, что просчитывалось следующим кодом несложным кодом:
if (Input.isTriggered(INPUT_SHOT)) {
     if (Input.isPressed('INPUT_SHIFT')) this.shotWeapon(0, true);
     else this.shotWeapon(0, false);
}

То есть при зажатии двух кнопок вызывалась функция с двумя аргументами: 0 и "true", где:
  • "0" - слот экипировки оружия (для справки: 0 - это оружие, 1 - щит, 2 - броня головы, 3 - броня тела, 4 - аксессуар),
  • "true" - использовано альтернативное оружие. И этот второй параметр так и передавался через все функции, а те, в свою очередь, проверяли какое оружие использовано. Мало того, что было куча проверок, так еще и с каждой новой возможностью оружия этих проверок становилось всё больше

Один параметр

Решение было простым - а давайте просто сделаем возможность вместо альтернативных тегов оружия указывать ДРУГОЕ оружие. То есть при зажатии двух кнопок у нас просто выстреливало оружие с ID, которое указывалось в заметках экипированного оружия. Теперь настройка стала легче

Однако, ни от второго аргумента функции,ни от кучи проверок мы не избавились. Надо оставить один параметр функции, и соответственно этот параметр должен быть слотом экипировки. А потому логично всего лишь взять и добавить еще один слот экипировки, в котором у нас будет храниться альтернативное оружие. Соответственно,код у нас становится таким
if (Input.isTriggered(INPUT_SHOT)) {
     if (Input.isPressed('INPUT_SHIFT')) this.shotWeapon(0);
     else this.shotWeapon(5);
}

Шестой слот

А вот как добавить этот шестой слот была та еще задачка. Минут сорок при инициализации текущей экипировки я пытался вставить дополнительный слот партии $gameParty.leader() . И только потом я наконец догадался, что слоты у партии берутся из слотов героя, у значит у Game_Actor. Еще через мучительных поисков в коде и попыток сделать красиво, я в итоге довольно костыльно изменил одну строчку в функции Game_Actor.prototype.initEquips
var maxSlots = slots.length+1;

До меня таки не дошло, откуда берется количество слотов у героя, и в итоге я тупо прибавил к нему единичку :silly:

А дальше всё просто. Если у оружия в слоте "0" есть тег altId, то мы добавляем шестой слот экипировки с id=5 (помним что нумерация слотов идет с нуля) - $gameParty.leader()._equips[5]:
if (altId) {
     $gameParty.leader()._equips[5]._itemId = altId;
     $gameParty.leader()._equips[5]._dataClass = "weapon";
     this.addParamsWeapon(altId);  
}

Патроны

Ну и последнее - если у нас второе оружие стреляет одинаковыми патронами и по сути является тем же оружием с измеенной характеристикой, то нам надо,чтоб магазин был один. Поэтому добавляем проверку "если у оружия одинаковые патроны, то в функцию "траты" патронов мы передаем магазин оружия с нулевого слота:
let equip = $gameParty.leader().equips();
let altEquip = (equip[0].meta.itemBullet == equip[5].meta.itemBullet) ? equip[0] : equip[5];

ИТОГО:
С помощью менее 10 строчек добавлено альтернативное оружие B)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: I_LORD, poca, Doctor_Bug

Дневник разработчика YuryOl 1 мес. 3 нед. назад #106617

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Мастер
  • Из горизонта события! ▪_■
  • Сообщений: 235
  • Спасибо получено: 354
  • Проект месяца 3 местоПрограммист Ruby3 место в Кодировке3 место
Вот смотрю на блок-схему и думаю. Может тоже состряпать такой же блок. Юр, а на какой проге ты рисовал схему то, фотошоп? Просто так в акурат все нарисованно. Да здесь указаны практически одни update'ы, чувствую разных там переменных и прочих данных много. А вот не сильная связь между модулей это тема. Класс, молодец %)
Bug
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Дневник разработчика YuryOl 1 мес. 3 нед. назад #106631

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1069
  • Спасибо получено: 1571
  • 2 место 1 место в ГотвПобедитель конкурса3 место ГотвОраторКомпозиторУчитель
Doctor_Bug пишет:
Вот смотрю на блок-схему и думаю. Может тоже состряпать такой же блок. Юр, а на какой проге ты рисовал схему то, фотошоп? Просто так в акурат все нарисованно. Да здесь указаны практически одни update'ы, чувствую разных там переменных и прочих данных много. А вот не сильная связь между модулей это тема. Класс, молодец %)

спасибо! апдейты - это я описание пока не писал,лень:)

делал в https://go.gliffy.com , но не советую - хоть и удобно, но там только пробный период и сохранить нельзя. я в итоге по-быстрому набросал для пробы и заскринил, а потом склеил в ФШ. Наверняка есть бесплатные инструменты для этого.
Администратор запретил публиковать записи гостям.

Дневник разработчика YuryOl 1 мес. 3 нед. назад #106633

  • NettySvit
  • NettySvit аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 253
  • Спасибо получено: 785
  • Победитель конкурсаОрганизатор конкурсовВетеранПроект месяца 3 местоПроект месяца 2 место1 место в ГотвПисатель2 место 3 местоРазработчик
yuryol пишет:
делал в https://go.gliffy.com , но не советую - хоть и удобно, но там только пробный период и сохранить нельзя. я в итоге по-быстрому набросал для пробы и заскринил, а потом склеил в ФШ. Наверняка есть бесплатные инструменты для этого.

Есть хороший сайт для создания блок-схем — draw.io. Всё сохраняет и денег не просит. Надеюсь, подойдет под нужды.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: poca, yuryol, Doctor_Bug, WhitePaper
  • Страница:
  • 1
  • ...
  • 4
  • 5
  • 6
  • 7
  • 8
Время создания страницы: 0.359 секунд