Перейти к содержанию

Пушка Гаусса


Ergo

Рекомендуемые сообщения

Опубликовано

Спасибо, Baxton Bry за ценные советы. Кстати, пробовал реализовать проницаемость по описанному тобой способу с картинками. Что-то ничего путного не получилось. Только правда,иногда вместе с мобами и сам протогонист погибал эдакий камикадзе, только без самолета. :)

 

сессию сдал, готов вернуться в ряды творцов.

 

Есть мануал не для чайников, а для тупых чайников, чтобы механика построения диалогов была расписана подробно? Потому что во многие сленговые вещи я не врубаюсь совсем.( Арк прошел до конца 1 раз 5 лет назад. ) и очень хотелось бы это на нашем языке увидеть, а не на языке буржуев (надоел уж очень)

Опубликовано

Кстати, пробовал реализовать проницаемость по описанному тобой способу с картинками. Что-то ничего путного не получилось. Только правда,иногда вместе с мобами и сам протогонист погибал эдакий камикадзе, только без самолета. :)

 

0. Attachee = Triggerer //волшебная строка

 

1. loop for Everyone in Vicinity //начало цикла

 

2. distance between Attachee and Extra Object: get in Local 0 //расстояние между стреляющим и целью

 

3. distance between Attachee and Current Looped Object: get in Local 1 //расстояние между стреляющим и побочной целью

 

4. distance between Extra Object and Current Looped Object: get in Local 2 //расстояние между целью и побочной целью

 

5. IF Attachee can see Current Looped Object //на тот случай, если побочная цель находится за стеной

THEN do nothing

ELSE goto line X //проверка следующей побочной цели

 

6. IF Local 2 == 1 //определение области поражения побочной цели

THEN do nothing

ELSE goto line X //проверка следующей побочной цели

 

7. IF Local 0 <= Local 1 //определение области поражения побочной цели

THEN do nothing

ELSE goto line X //проверка следующей побочной цели

 

8. IF Local 0 == Local 1 //определение области поражения побочной цели

THEN goto line X //проверка следующей побочной цели

 

[секция с нанесением урона побочной цели]

 

X. loop end //конец цикла

 

Y. return and SKIP default

 

Attachee также будет являться Current Looped Object, избежать этого помогает строка 6.

 

Повреждения будут наноситься по следующей маске:

#####

#####

#####

#####

#####

,где

* побочная цель, CLO

* цель, EO

* стреляющий, Attachee

 

При попадании в область поражения побочной цели более 1 CLO можно отсечь остальных, вставив в цикл loop break.

 

Для каждого CLO можно создавать n вложенных циклов, но тогда действие оружия будет больше похоже на chain lightning.

 

Задать большее расстояние поражения побочной цели (аналогично тому что наглядно можно увидеть в crimson land) этим путем невозможно. Существует другая возможность: get location of (obj) and store X in (num) and Y in (num), для Att, EO и CLO, а далее сравнением X и Y. У меня плохо с математикой, я точно знаю что EO и СLO будут находиться на одной линии при равных X или Y, это уже 4 направления, а как определить другие направления? Направлений криттера 8 (facing direction), но при стрельбе возможно попадание вне этих 8 направлений.

 

3ca61ec17c7765377cfada4674ef8d27.png

 

8. Звук при выстреле, как из пистолета с глушителем.

 

Почему бы не изменить звук выстрела на более аутентичный?

 

FOT, gausssingle1.WAV

Опубликовано

Дополню тему.

 

Рассуждая логически, имеется треугольник с вершинами Att(x1,y1), EO(x2,y2), CLO(x3,y3). x123, y123 имеют целые положительные значения (int) относительно левого верхнего тайла (1,1) WorldMap.

 

Как проверить принадлежность точек Att, EO и CLO к одной линии?

 

Att, EO и CLO будут находиться на одной линии при выполнении условия d(Att->EO) + d(EO->CLO) = d(Att->CLO), т.е. когда треугольник не будет существовать. Но этот метод проверки неприменим из-за того, что d измеряется в тайлах (поверьте мне на слово, мне лень рисовать).

Опубликовано

Я очень классно веду монолог сам с собою.

 

Как я уже говорил, с помощью команды distance between (obj) and (obj): get in (num) проверить существование треугольника невозможно, но это возможно сделать, вычислив стороны треугольника через координаты.

 

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

 

Если вас все еще интересует правильный скрипт работы Пушки Гаусса, я его напишу.

Опубликовано

Braxton Bry

 

Все, что ты напишешь, мы (в частности D.D) будем использовать, для максимально лучшей реализации пушки гаусса.

 

Естественно мы безмерно благодарные за твои знания и труд.

The truth is, everybody is going to hurt you,

You just got to find the ones worth suffering for.

Опубликовано

Скрипт, работающий в 8 направлениях facing direction Attachee.

 

0eff63361410aca3d0337b7b3be9f2f2.png

 

СКАЧАТЬ

 

Cкрипт с комментариями:

 

0. Attachee = Triggerer

1. loop for Everyone in Vicinity //в цикле постепенное "отключение" "лишних" Current Looped Object

2. IF Attachee can see Current Looped Object  //(2) Current Looped Object вне пределов видимости Attachee
   THEN do nothing
   ELSE goto line 43

3. distance between Attachee and Current Looped Object: get in Local 0 //(3->4) Current Looped Object, являющийся Attachee

4. IF Local 0 == 0
   THEN goto line 43

5. distance between Extra Object and Current Looped Object: get in Local 0 //(5->6) Current Looped Object, являющийся Extra Object

6. IF Local 0 == 0
   THEN goto line 43

7. get location of Attachee and store X in Local 0 and Y in Local 2 //(7->10) разность координат по X, Y объектов Attachee, Extra Object

8. get location of Extra Object and store X in Local 1 and Y in Local 3

9. IF Local 0 <= Local 1
   THEN Local 4 = Local 1 - Local 0
   ELSE Local 4 = Local 0 - Local 1

10. IF Local 2 <= Local 3
   THEN Local 5 = Local 3 - Local 2
   ELSE Local 5 = Local 2 - Local 3

11. get location of Extra Object and store X in Local 0 and Y in Local 2 //(11->14) разность координат по X, Y объектов Extra Object, Current Looped Object

12. get location of Current Looped Object and store X in Local 1 and Y in Local 3

13. IF Local 0 <= Local 1
   THEN Local 6 = Local 1 - Local 0
   ELSE Local 6 = Local 0 - Local 1

14. IF Local 2 <= Local 3
   THEN Local 7 = Local 3 - Local 2
   ELSE Local 7 = Local 2 - Local 3

15. get location of Attachee and store X in Local 0 and Y in Local 2 //(15->18) разность координат по X, Y объектов Attachee, Current Looped Object

16. get location of Current Looped Object and store X in Local 1 and Y in Local 3

17. IF Local 0 <= Local 1
   THEN Local 8 = Local 1 - Local 0
   ELSE Local 8 = Local 0 - Local 1

18. IF Local 2 <= Local 3
   THEN Local 9 = Local 3 - Local 2
   ELSE Local 9 = Local 2 - Local 3

19. distance between Attachee and Extra Object: get in Local 0

20. distance between Attachee and Current Looped Object: get in Local 1

21. IF Local 0 == Local 1
   THEN goto line 43

22. IF Local 0 <= Local 1
   THEN do nothing
   ELSE goto line 29

23. Local 0 = Local 8 - Local 6 //(23->28) проверка равенства суммы расстояний (Att-EO) + (EO-CLO) расстоянию (Att-CLO)

24. Local 0 = Local 0 - Local 4

25. Local 1 = Local 9 - Local 7

26. Local 1 = Local 1 - Local 5

27. Local 0 = Local 0 + Local 1

28. IF Local 0 == 0
   THEN goto line 35
   ELSE goto line 43

29. Local 0 = Local 4 - Local 6 //(29->34) проверка равенства суммы расстояний (Att-CLO) + (CLO-EO) расстоянию (Att-EO)

30. Local 0 = Local 0 - Local 8

31. Local 1 = Local 5 - Local 7

32. Local 1 = Local 1 - Local 9

33. Local 0 = Local 0 + Local 1

34. IF Local 0 == 0
   THEN do nothing
   ELSE goto line 43

35. Local 0 = Local 4 + Local 6 //(35->38) проверка принадлежности координат Attachee, Extra Object, Current Looped Object к направлениям N, E, S, W

36. IF Local 0 == 0
   THEN goto line 41

37. Local 0 = Local 5 + Local 7

38. IF Local 0 == 0
   THEN goto line 41

39. IF Local 4 == Local 5 //(39->40) проверка принадлежности координат Attachee, Extra Object, Current Looped Object к направлениям NE, SE, SW, NW
   THEN do nothing
   ELSE goto line 43

40. IF Local 6 == Local 7
   THEN do nothing
   ELSE goto line 43

41. kill Current Looped Object //маркер

42. do nothing //строки (41->42) должны быть заменены на расчет и нанесение урона

43. loop end

44. return and SKIP default

Вопросы, предложения?

Опубликовано

to Baxton Bry:

 

Снимаю перед Вами шляпу! Спасибо за скрипт, я бы до этого дошел очень не скоро. На днях займусь, сейчас на работе запары, нет времени совсем. :clapping::good:

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...