RS Game Maker Community
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

 
Расширенный поиск
  Главная Форум Вики Блоги FAQ Игры Статьи Примеры Войти Регистрация  
  Просмотр сообщений
Страниц: 1 2 3 4 5 ... 7
1  Проекты и Релизы / Проекты в разработке / Re: Westland[WIP] Hellroom Jam #8 : 05 Сентября 2017 в 21:16
Добавлены наказания за нечестную\неправильную игру

Если запрещенная стратегия является оптимальной (самой удобной и продуктивной), то наказания никак не помогут. В таком случае игроки выбирают стратегию, ближайшую к запрещенной (и, возможно, при этом проклинают разработчика страшными словами).
Если за кемперство убивают через минуту стояния на одном месте, то игроки будут стоять на месте 59 секунд, что было замечено еще в древние времена на серверах CS1.6 и Quake. Если в файтинге запрещен спам "читерного" комбо 10 раз подряд, они будут делать его 9 раз подряд.

Этой проблемы можно относительно легко избежать, изменив среду так, чтобы нежелательная стратегия перестала быть оптимальной. Поставить стену перед кемперской позицией, добавить combo-breaker и т.д. Тогда кемперить никто не будет, так как выгоднее бегать по карте (больше фрагов, опыта или чего еще).

Объясняю на пальцах: средний видишь?
[attachment=1]
Вот исходная ситуация в виде графика. По оси Х различные стратегии ("честные" справа), по оси Y – их продуктивность (точнее наоборот – штраф, чем меньше, тем лучше). Видно, что одна из стратегий лучше остальных, но по какой-то причине она нам не подходит.

[attachment=2]
Здесь добавлено наказание за нечестную игру. Это означает, что был добавлен штраф к нескольким стратегиям вблизи нежелательной. При этом минимум переместился, но очевидно что он продолжает стремиться к "кемперству", так как принципы игры не изменились.

[attachment=3]
А вот если правильно изменить оценку, то минимум естественным образом сдвигается в "честные" стратегии.
2  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 25 Июня 2017 в 18:36
Во-первых, вместо стены ифов лучше сделать массив смещений.
Ну и если image_speed не 1, то image_index может равняться хоть 3.14159265, и иф, соответственно, не сработает.


xcor[0, 0] = 0;
xcor[0, 1] = -1;
// ...
xcor[0, 19] = 1;


xcor[1, 0] = 4;
// ...
xcor[1, 15] = 4;


// ycor[...] = ...

 
var i_off;
switch( sprite_index ) {
    case( luna_stay ): i_off = 0; break;
    case( luna_stay_a ): i_off = 1; break;
    // ...
}
if( global.hat == 0 ) {
    var ii = floor( image_index );
    draw_sprite( sprite, 0, player.x + xcor[i_off, ii], player.y + ycor[i_off, ii] );
}

В качестве бесплатного бонуса – игра упадет при выходе за границы массива, вместо того чтобы рисовать бред.

P.S. У тебя в строчках 21-22 одинаковые условия.
3  Портал / Песочница (статьи) / Re: Декомпилятор для GameMaker:Studio : 20 Июня 2017 в 23:04
Подборка интересных фактов:
  • Аксессоры – это на самом деле функции, и их можно даже вызвать напрямую.
    a = list[| i ];<=>   ds_list_find_value( list, i );
    list[| i ] = a;<=>   ds_list_set( list, i, a );
    a = map[? key ];<=>   ds_map_find_value( map, key );
    map[? key ] = a;<=>   ds_map_set( map, key, a );
    a = arr[@ i ];<=>   array_get( arr, i );
    arr[@ i ] = a;<=>   array_set( arr, i, a );
    a = grid[# i, j ];<=>   ds_grid_get( grid, i, j );
    grid[# i, j ] = a;<=>   ds_grid_set( grid, i, j, a );

    Это может упростить работу со вложенными массивами
    inner[5] = "Hello";
    arr[1] = inner;

    // show_message( arr[1][5] );   // ERROR
    show_message( array_get( arr[1], 5 ) );   // "Hello"

    Так же, как и функции, не проверяют тип аргумента. Хотя его вообще нельзя проверить, потому что id структуры это просто число, так еще и для каждого типа отдельная нумерация.
    var map = ds_map_create();
    map[? 13 ] = "map";

    var list = ds_list_create();
    list[| 13 ] = "list";

    show_message( map[? 13 ] );  // "map"
    show_message( list[| 13 ] ); // "list"
    show_message( map[| 13 ] );  // "list" !!!
    show_message( list[? 13 ] ); // "map"  !!!
  • Двумерные массивы можно использовать как одномерные с размером до 32000*32000 = 1024000000.
    i = 5;
    j = 2;
    a[i, j] = 42;
    // a[i, j] == a[i*32000 + j] == a[5*32000 + 2] == a[160002] == 42;
    for( var i = 0; i < 1000000; ++i ) {
        a[i] = i + 1;
    }
    show_message( a[65535] ); // 65536
4  Портал / Песочница (статьи) / Re: Декомпилятор для GameMaker:Studio : 19 Июня 2017 в 12:51
Do, конечно. Это я, видимо, с Lua его перепутал.
В любом случае, сейчас перепроверил - он тоже нормально восстанавливается.
5  Портал / Песочница (статьи) / Декомпилятор для GameMaker:Studio : 18 Июня 2017 в 15:10
В старые времена GML был интерпретируемым языком, и код хранился в исполняемом файле чуть ли не с комментариями, так что "декомпилятор" было написать крайне легко. С выходом GM:S хорошие времена для мамкиных хакеров закончились – теперь YoYoGames встроили в исполняемый файл виртуальную машину собственного изобретения и GML компилируется в байт-код для неё. При этом формат байт-кода и файла периодически заботливо меняют.
Насколько мне известно, на данный момент для GM:S не существует инструментов для декомпиляции. Есть конечно распаковщики ресурсов (типа Altar.NET), но они не производят никакого анализа и уж точно не генерируют код на GML. Таким образом, мой проект предназначен для того, чтобы закрыть эту нишу.

Итак, я сотворил прототип декомпилятора на С++. Все желающие могут скачать его с репозитория и оценить, как он не работает. Для удобства я также подготовил архив с тестовым проектом, на котором декомпилятор точно не падает.

Принцип работы
В основе лежит алгоритм структурного анализа. Программа разбивается на базовые блоки – участки кода, которые не содержат инструкций перехода. Из них потом строится граф потока управления (flowgraph), где узлы – это собственно базовые блоки (ББ), а дуги – переходы между ними.

[attachment=1]
Рис. 1. Граф потока управления.

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

[attachment=2]
Рис. 2. Шаблоны конструкций.

[attachment=3]
Рис. 3. Пример свертки.

Последний оставшийся узел содержит в себе дерево управления, оно же (в данной реализации) синтаксическое дерево. И на основе его уже генерируется код на GML.

[attachment=4]
Рис. 4. Дерево управления.

Основные проблемы
  • Невозможно создать шаблон для циклов, содержащих break и continue. Так что для их распознавания нужен другой метод.
  • Отсутствие какого-либо анализа потока данных не позволяет нормально обрабатывать инструкцию dup, так как в этом случае на стеке оказывается две версии одной переменной, и все ломается.

Текущие возможности
Сейчас декомпилятор может восстанавливать следующие конструкции:
  • if, if-else
  • while, for, repeat-until do-until (for превращается в эквивалентный while)
  • Арифметические выражения любой сложности, с операторами разного приоритета и вложенными скобками. Иногда код после декомпиляции выглядит лучше исходного
  • Аналогично, логические выражения (отдельный пункт, т.к. они представлены совершенно другим образом)
  • Вызовы функций (в смысле скриптов) с любым количеством аргументов.
  • +=, -=, *=, /=, …
  • Массивы, в том числе двумерные.
  • Обращение к полям объектов.
Все перечисленное может иметь любую сложность и глубину вложенности:
a.b.c[d.e || true, f.g.h && s[t, u && v]] = s || x && --lol;

Работа над проектом будет продолжаться, пока GMS2 не выйдет из беты. Так что даже есть шансы, что он будет закончен.

6  Портал / Новости / Re: GameMaker Studio 2 : 18 Мая 2017 в 14:18
А как там с редактором кода?
Т.к. у старых версий, особенно 8.0 и ниже с этим делом ситуация довольно печальная (вспомнить хотя бы отступы по Shift-I).
7  Разработка / Вопросы и ответы по GameMaker / Re: Анимация : 15 Мая 2017 в 16:56
//Бег
if keyboard_check_pressed(ord("D")) or keyboard_check_pressed(ord("D"))
Че-то подозрительно...
8  Проекты и Релизы / Проекты в разработке / Re: CYCLUM[Gamiron13] : 06 Мая 2017 в 23:59
Вот здесь, особенно в полноэкранном. И еще где-то в зеленой зоне.
9  Проекты и Релизы / Проекты в разработке / Re: CYCLUM[Gamiron13] : 06 Мая 2017 в 18:02
Что?
Нормальное управление, отключаемый звук? Поглощение врага дает больше чем 0,05хп, красноглазые больше не убивают с двух попаданий, к зеленым можно подобраться и не огрести?
Да кто в это вообще играть будет!
Все настолько плохо, что зеленое ядро я открыл с 4й(!!!) попытки! Как при такой халяве может сохраняться интерес к игре?
Хотя, конечно, баг с пожиранием сквозь стену больше не работает, но уровень хардкора все равно критически низкий.

Теперь к хорошим новостям: наконец начались просадки фпс, но пока только в некоторых местах (например сразу после синего ядра). Надеюсь к следующей версии это будет исправлено, и игра будет соответствовать высоким стандартам инди-игр с красным рейтингом из раннего доступа Steam.
10  Проекты и Релизы / Проекты в разработке / Re: CYCLUM[Gamiron13] : 04 Апреля 2017 в 22:50
Хотелось бы, чтоб игрок ускорялся и тормозил побыстрее. А то управление вызывает ассоциации со школотуториалами на юнити, там тоже любят такое делать.

UPD. Еще в приличном обществе принято ругать нерегулируемый звук. К счастью, мне пофиг =]
11  Проекты и Релизы / Проекты в разработке / Re: CYCLUM[Gamiron13] : 04 Апреля 2017 в 22:10
Лол, POUSE
Весьма хардкорно (в том числе из-за странноватого управления).
Зеленое ядро сложное, там на каждом шагу стоят эти детекторы, под маскировкой не полетать.
А красное вообще адский ад. Вот как здесь пройти?
[attachment=1]

BTW, фоны шикарные.
12  Портал / Новости / Re: GameMaker Studio 2 : 31 Марта 2017 в 17:38
Тыжпрограммист, сделай свою IDE круче крайзиса и гта.
13  Портал / Новости / Re: GameMaker Studio 2 : 23 Февраля 2017 в 13:39
Так там же нет IDE как для GM, чтоб всё вместе - и код, и спрайты, и звуки. Чтоб любой даун разобрался. (а LöveStudio уныла)
Поэтому порог вхождения объективно выше. Кстати, там наконец появилась хоть какая-то проверка столкновений?

Так-то ничего против него не имею, но вот к этим моментам надо привыкнуть.
14  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 19 Февраля 2017 в 18:54
Можно в столкновении с платформой сделать, чтобы объект из неё выталкивался.

 
vspeed = 0;
gravity = 0;
y = other.bbox_top - (bbox_bottom - y);

Правда это только для неподвижных платформ. Если платформа наедет на объект сбоку, он телепортируется наверх.
Может кто-то (или Кто-То, ага) изобретёт более красивое решение.
15  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 14 Февраля 2017 в 20:03
Очевидно же, забыл про surface_free()
16  Портал / Новости / Re: С новым 2017 годом! : 01 Января 2017 в 00:04
В этом году форум с некоторой болью переехал на новый домен и даже сейчас в заголовке темы старый, да ещё с опечаткой ).
Но все это пережили ХД.
В общем, желаю нам в 2017 успешно завершить свои долгостроящиеся проекты.
17  Общение / Курилка / Re: "Knight Game 2" Третий прототип : 26 Декабря 2016 в 00:08
На первой карте по колодцу возле спавна вообще можно подняться?
Я минут 15 там прыгал =]
18  Портал / Работа с GameMaker / Re: Азы оптимизации : 20 Декабря 2016 в 20:25
2) Почему полное комментирование (но не удаление) кода Draw дает больший прирост чем невыполнение условие обработки кода?

Дело в том, что компилятор GM:S не оптимизирует условия, и в исполняемом коде так и остаётся что-то вроде:
push 0
jz 0xDEADC0DE
то есть ненужная проверка, жрущая время (впрочем немного).
Кстати, константные выражения оптимизируются на этапе компиляции: a = (2+2)*2; даст тот же код, что и a = 8;
Объявляю себя местным экспертом по байт-коду студии )


3) Почему  отключение логики дальних врагов само по себе дало прирост 65 фпс, но при работающем деактиваторе и возврате логики фпс упал не на 65 - с 235 до 170, а аж на 150  - с 235 до 90.

Очевидно, деактиватор сам по себе требует вычислительных ресурсов. Попробуй замерить без логики, но с деактиватором.
19  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 18 Декабря 2016 в 11:14
midX = mean(obj1.x, obj2.x);
midY = mean(obj1.y, obj2.y);
20  Проекты и Релизы / Проекты в разработке / Re: ISO Wolf roguelike (Вольфенштейн в изометрии наподобие рогалика) : 07 Декабря 2016 в 22:46
В таком же духе сделал бы ты дум, было бы прекрасно
Примерно так
Страниц: 1 2 3 4 5 ... 7
RSGMC (gmakers.ru) © 2007—2017
Счётчик–@Mail.ru