Войти
ФлеймФорумПроЭкты

Жаба-гринд-2д

Страницы: 1 2 3 4 5 Следующая »
#0
(Правка: 31 янв. 2021, 1:34) 18:25, 22 фев. 2020

Игра бесплатная, открытые исходники.
Вникай и делай свою игру, поверх моей.

Наш герой-попрыгунчик - это типаж робота под наименованием "жаба".
Изображение

Скачать маленький движок-редактор Годот (не требует установки).
https://godotengine.org/

И открыть в нём вот эти исходники игры (любой архив нижэ)..

v129 (exe win lin 32 64 + src)
v129 архив на itch_io
Есть сохранение игры в файл-слот. (2020 октябрь 17)

v131 (src)
Добавлена папка "jg_base" с полу-пустым проектом, для новых прототипов,
чтобы не задевать кучу предметов из демо-платформера.

v132 (src)
Дождик из пулек..
Изображение

// ---
На основе дву-мерной демо движка Godot:
Dynamic Character Control-Based Platformer
(папка в архиве.. physics_platformer).
https://godotengine.org/asset-library/asset/119

Тюнинговать, и напихать туда всего - можт быть будет что-то вменяемое.

// Не исключено, что на Debian10 всё нормально, но у меня,
// линукс Debian9 --> Не запускается Godot_v3_2.
// Поэтому мои слова лиш про версию Godot_v3_1.

//

// --- 2020 октябрь 4 (некое пояснение):

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

По моим правилам игры, почти все гоблины и люди - неубиваемые.
При этом, они могут кидать в игрока гранаты, и ловушки-замедлялки.


? какой жанр игры ?
"платформер-гриндвания с логическими мини-играми".

Платформер = игроку надо много прыгать, наблюдая проекцию сбоку.
// Минимальное вжывание в роль главного героя - он всегда по боку.

Гринд-вания = Метроидвания, где надо бегать кругами, чтобы накопить
ресурсы, за которые откроем новые локации, для новых кругов.
// В конце игры и сюжэта, всё-таки есть явный финишный створ.

Логическая мини-игра = планирование постановки цветных кубиков.


? какой литературный стиль ?
Не ясно - мозаика, отрывки.

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

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


? тематика событий ?
"вымышленый боевой конфликт между роботами разных фракций".

Действие игры происходит на вымышленой планете, в далёком будушем.
Кроме роботов, игрок встречает зверей, элементалей, гоблинов и людей.

Идёт какой-то хитрый план перехвата важных действий врага, но
плавно всё приходит к заключению мирного договора.


? немного о главном герое ?
Робот - боевой оператор чудесной базы, которая как монастырь-братство.
Он один из братьев, которые маркированы словом "жаба", но похожы на людей.
Никто не знает, почему это слово было избрано для наименования типажа.

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

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


#1
18:25, 22 фев. 2020

// ---
Все эти наброски - туман.

Что делаем в игре..

1. собираем начальные плюшки (пушку, патроны, гранаты).
Всё доступное, чтобы продолжать повышать силу (убойную и экономическую).

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


= коридор, без помех - разгончик
(новичков заставить получить рану - показать, что это не страшно)
(взять пару преметов, прочитать пару весточек).
У игрока есть изначальное колво денег,
и сразу есть разовые монетки, в этом коридоре.


= отвил не-обязательный - включить генератор запасных броне-пластинок
(это для тех, кто плохо _прыгает_избегает аркадных пуль)
Опытным игрокам пофигу на эти доп-хит-поинты-пластинки, но можно
их чуток закупить, чтобы в самом начале полегче было.
// Не исключено, что прыжок зажатый - надо развивать.

Колво броне-пластинок _накапливается - это просто пульт с числом.
Если прыгать и стрелять в значок руки, над пультом, то игрок пытается
обменять свой счётчик золота на один доп-хит-поинт - механика
владения доп-броне-пластинками - это отдельное свойство - наверно
можно прокачивать - сначала можт быть лиш один доп-хит, но
он на себя забирает весь урон пульки, что часто выгодно, если
игрок сражается против сильного врага, надеясь избежать все
пульки своим движэнием, но если вдруг какая-то пулька его
заденет, то там урон большэ, чем норм-хит-бар игрока - поэтому,
даж один такой броне-поинт можт помочь одолеть испытания,
где можно получить ваншот.

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


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

#2
18:25, 22 фев. 2020


= далее много развилок - можно пробежать в отвил, чтобы там взять
талант-чип или предмет _золотой_дух
// оформить можно, как черепок с двумя золотыми звёздами, вместо глаз.

Такой талант можно не брать (наверно, он вредный), но он сильно помогает,
потому-что _капает монетки от себя, и само-прокачивается от собирания
монеток - каждые 100 монет, он увеличивает свою _капельницу на монетку.
Тоесть, сначала 5 монет, каждые 10 сек.

(наверно, этот чип-талант полностью блокирует работу регена хит-поинтов)
// А в каком-то отдельном сценарии, аля дополнение игры, можно привязать
// работу этого таланта к _плавному_повышэнию силы главной злодейки -
// безпошядная жадность.
// Тоесть, не исключено, что чипы можно отключать в спец-местах,
// которые отмечены аля пульт_пере_распределитель талантов-чипов.

Есть ешё один путь добывать деньги - хакерские денежные узлы - подобие
шахты золота из пошаговых игр - через некий интервал, выдаёт
заметное колво денег - узлу можно переключать _флаг - на кого слать
деньги - изначально флаг можт быть серым, потом игрок вешает свой
флаг, а иногда явные враги себе включают флаг (цвет особый),
и значит, спаунит большэ своих солдат ...
Вобшем, изначально так не усложнять - просто, подобие авто-шахты,
а потом, надо придумать отягошение за владение такими хак-узлами.
Можно это лиш в _моральном планет учитывать, мол каждый тик мы грабим
добрых людей - если будут купцы, то в диалогах, они могут подчеркнуть,
что игрок слишком много ворует через денежные узлы - нет заданий.

// Около узла_денег - тупик очень аркадный, и там _накапливается хит-бар
// псевдо-боса (страж узла) - сразу его не победить, наверно - какой-то
// предмет прям обязательно нужн - так-что сначала добыть, а потом
// в этот трудный тупик совать нос - фигово, если игрок будет
// туда бегать и подыхать, не понимая, что нет нужного предмета.

Если игрок не хочет поднимать _авто_экономику (добрый моралист),
то его доход будет зависеть от двух - собирать монетки,
и не делать ошыбок, чтобы не покупать компенсаторы этих ошыбок
(есть пре-компенсаторы - это доп-хит-поинты перед боем)
(есть норм компенсаторы - это лечилки после боя).
// Ну и нельзя забывать про исполнение заданий - могут дать
// любой предмет (оговореный, или сюрприз), вместе с деньгами,
// либо тупо только деньги за задание дадут.


Ахтунг - сомнительно внедрять мораль в пиф-паф-платформер.
И диалоги _плохой_хорошый мне тож не нравились никогда.

#3
18:26, 22 фев. 2020

= в разных местах, расположыть пульты, которые продают что-то
одно - патроны или гранаты, или типа того ...
// Есть пульты, которые надо _включить, и они будут накапливать.
// Магазин-пульты не накапливают предметы, но у них есть
// откат выдачи - купили гранату - откат минута - каждую минуту
// покупай _бесконечно - откат считаем _у_игрока - масив откатов,
// ставим номер купленого предмета, и колво секунд мотаем вниз.
// Тоесть, даж переход меж комнатами не сбрасывает откаты - магазин
// другой, а гранату всё-равно нам не хочет продавать. гы-гы.

Патроны - зажигательные или усыплялки (ну и простые патроны).
Зажигалки отличны тем, что есть враги с _огне_элементом - по ним
огне-патроны _слабо_ранят, либо лечат, если враг большэ 50 процентов
состоит из элемента огня.
Усыплялки - слабые, тормозят _жывых врагов - есть шанс вогнать
в сон - 3 секунды игнор урона, а потом - любой урон их _разбудит,
а если не разбудили, то 10 секунд они спят - иногда удобно.

// Но можно не усложнять пальбу - достаточно чтобы шанс торможэния
// срабатывал - тогда можно их ледяными патронами называть.
// Хотя не нужно - лёд слишком против огня не ясен - вроде-бы
// это противо-элемент, но я не верю, что лёд эфективен против огня.
// Поэтому не надо ледяных патронов - достаточно неких _тормозных,
// чтобы не пересекать тему элементов - лиш один элемент = огонь.


= пуляем во врагов - встречаем коридор, где трудно - надо что-то особое.
Шиты какие-нить или псевдо-расходник.
Вобшем, при правильном использовании, эта фигня отвлекает,
и вдобавок, можно эти _манекены_отвлекалки оставлять себе
на последних хит-поинтах - забирать в рюкзак, и они там отрегенят
себя, но сам факт _постановки_манекена идёт отдельным откатом, и факт
_подобрали_манекен тож идёт отдельным откатом. Либо сделать это
одним событием _работа_с_манекеном - один откат будет, и когда
мы взяли манекен обратно в рюкзак - откат обновился.
// Тоесть, абилка _выставления_манекена требует, чтобы отката не было,
// а вот возможность _взять_манекен, откат не смотрит, но его обновляет.


(снова накапливаем кучу деталей - слишком сложно такое делать).

#4
18:26, 22 фев. 2020


= супер-турель - стреляет рокетами - врагов выбирает хаотично,
должн быть некий радиус _восприятия новых целей.
// Возможно, радиус циклим, попадая по турели - проявляем вспышку
// радиуса, и этот визуальный эфект плавно исчезает, и ужэ
// не видно по какому- радиусу идёт захват - два варианта.

= тупая турель - пукает прямые невидимые пули по горизонтали
(игрок их не видит, чтобы не отвлекался, но они летят).
// Попадание пулей игрока (пуля только от игрока) должно менять
// направ - два варианта.
Чтобы игрок не пережывал о вылете пуль, надо обязательно
вспыхивать около дула, мол наша пуля вышла, хоть её и не видно.

= тупой_дрон (арканоидно отражается от стен - летает)
// Собирает на свой хит-бар пульки врагов любых.
// Иногда стреляет миговой пулькой во врага, если тот близко.
// Не чувствует тела врагов ... Возможно, ранит себя о любые лужы.
// (игрок тож можт тормозную лужу образовать).

= тупой манекен - бросаем рядом с героем - некоторые враги
по манекену будут пулять свои рокеты и пульки.
(будут толкать его, и замедлять своё движэние).
Манекен можно двигать, упираясь в него, замедляя своё движэние.
Если попасть пулькой игрока по манекену - это возврат манекена.
(манекен можно юзать, чтобы прыгать на высокие плато - подставка).

// После этого, надо попасть пулькой по манекену - как-будто мы
// его подняли к себе в сумку - можно снова его выставить. гы-гы.
// Засчитывать лиш _обычные пульки - если надо стрелять во врагов рядом
// с манекеном, и не убирать манекен - долби альтэрнативными пульками.

У всех верхних предметов, надо добавить хит-бар.
Не исключено, что можно находить _детали, которые повысят
хит-бар конкретному предмету (дрону или простой турели).
Тоесть, все верхние - это расходники (они все стаковые),
но за счёт хит-бара, можно экономить колво в стаке.
И при этом, _весь_стак всегда идёт в работу, когда из сумки
выбрасываем - надо быть внимательным - вовремя делить стак
турели, который мы _выкинем, и не вернём. Обычно, надо
отделить единичку и её выкинуть, но иногда, врагов много,
и надо выкинуть сразу 5 штук - хит-бар кончается и само-обновляется,
и наша турель долшэ будет держать _направление от толпы врагов.
// сложности - повсюду сложности

Не исключено, что у альтэр-атаки будет свой слот в сумке.
// игрок пере-ставляет предметы в сумке - первый слот - закрепить там
// не-убираемый предмет _генератор_болтерных_пулек, и рядом особый
// слот - для пуль альтэр-атаки (кнопка-команда _альтэр_атака).
Ставим в этот слот Гранаты, или можно поставить
бутылку с тормозной лужэй, либо поставить туда стак рокет ...
Вобшем, любые патроны туда можно поставить.
И обычная атака пусть всегда пуляет бесплатными пульками.
// Откат каждого вида пулек свой.
// Вероятно, каждый откат можно отдельно прокачать.
// Поэтому у каждого отката должн быть минимум-сейчас-максимум.
// Максимум надо иметь, если какой-то враг _проклял некий откат
// (или проклял все откаты героя) - удвоеное время ...

= патроны огня.
= патроны тормозухи (или отравления)
= рокеты (полу-само-наводка)
= гранаты (по местности бахаем)
= гранаты лужы (бутылка лужы - возможно, ядовитая зеленая лужа)
// для всех ядовитая - для игрока тож, но ранит не сильно, а
// тормозит всех одинаково, и наверно, прыжок блокирует.


Никаких замедлений времени не надо - слишком трудно реализовать.

Но вот некую шок-волну надо-бы как-то прилепить.
Тоесть, часто бывают моменты, когда враги близко, и пульки
не сносят их - зажал команду _вниз и пальнул норм-атакой - шок-волна
отбросила ближних врагов. А если зажать _вниз + альтэ-атака, то
какой-то второй особый боевой приёмчик - наверно, это зависит от
чип-талантов главного героя - надо найти-экипировать подобное.

#5
18:27, 22 фев. 2020

// --- обзор демо-платформера в годоте..

= Cтрельба не работает, если зажать влево + прыжок.
Пробел не хотят опознавать - значит, надо сменить кнопку стрельбы.
Например, Контрл выставил - нормально работает.


визуал = тайлы - прорехи - если убрать фильтр, то чуть лучшэ.
Значит виновата не-правильная оригинальная текстура для тайлов.
Не исключаю, что отдельные текстуры для каждого тайла могут порешать
эту проблему. Либо отредактировать текстуру, сделав _рамочки вокруг
тайла, с повтором крайних пикселей. Любая фильтрация станет
доступна - соседний пиксель края всегда будет _повтором края.

визуал = ноги героя чуток нижэ. Там у него красный триуг колизии вышэ,
поэтому провал ног. И вдобавок тело не центрировано (голова в центре),
и при развороте, ноги слегка вылезают за _траву, на склонах.

визуал = ноги врагов-панцирей вышэ, чем у героя.
Убрал им скорость движухи, и тормознул реакцию на колизию.
Теперь они вмеру правдиво двигают лапы, по отношэнию к движухе.
// И можно теперь их толкать - баран с бараном упираются.

визуал = слой врагов рисуют ближэ на камеру, чем героя.
Перекинул слой врагов повышэ, среди нод - нормально стало,
как-будто наш робот чуть ближэ к игроку бегает.
// Надо-бы найти этим врагам _набор_цветов, но сначала надо
// придумать им роли (конкертно этим панцирям).

Часть панцирей - мирная - это не напрягает, и ожывляет - косяки
забавные могут быть. И вдобавок, на них можно тригеры внедрять
(если игрок коснулся, или если убили панциря)
(или если панциря дотолкали до спец-сенсора).
(изменить цвет текстуры для мирных)

Допустим, красные будут, как шыпастые, и будут ранить,
но не надо делать _толкания_от_ранения.

Некий враг, через интэрвал, выстреливает шыпы, во все стороны.

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

#6
18:28, 22 фев. 2020


= Если смотреть на фон, то там розовые и жолтые яблоки, потому-что
пиксель вдали, как кулак вблизи ...
Тоесть, можно подобрать текстур кустов с ягодами, и понатыкать таких
спрайтов перед героем, как-бы между камерой и платформами.
Подобным образом, найти всякие пятна-размывы, чтобы натыкать поверх
волн земельных пластов.
// Сами волны забавны. Если делать подобный набор тайлов, то
// волну можно нарисовать чуть острей, но всё-равно плавными.


= Внедрил герою мини-откат прыжка - игроцкий вариант получился.

= рычаг-качалка из демо - не нужна - не вписывается в мой стиль.
// Рампа-наклон тож под негативным взглядом, потому-что
// сделал панцирям наклон, но панцирь явно вышэ склона ползёт.


= Добавил всему тайл-мэпу этапчика - _прыгучесть для выталкивания.

В демо есть прямуг, который пропускает в одну сторону.
Он глючит, конечно.
Возможно, там надо регулировать _маргин с умолчательной единицы до 128.

Но и на умолчанке забавно - героя почти не пускают, а вот пульки
часто с друг-другом колбасит, и одна проскакивает иногда _за_клапан.

Можно делать точ-филды для пулек _за_клапаном - чуток подолби
клавишу стрельбы - какая-нить из пулек проскочит, и активирует.
Но важно - нельзя так делать с обязательными точ-филдами - только
всякие _сайд_квэсты.

Важно - плато из оригинальной демки было поставлено в _проёме,
который чуток шире чем прямуг клапана, и я там пару раз застревал
из-за того, что наш герой колизит _триугом, острым концом вниз.
Я думаю, что это оригинальный крутой триуг - идея авторов,
но важно не делать мелких дырок, где можно застрять.

Тоесть, если нужэн клапан - надо, чтобы его квад на пиксель
проникал в другие колижны (колижны тайлов).
Пропускная сторона, как я понял - это угол поворота.

Жэлательно, аля решотки изобразить, если это боковые клапаны.

#7
18:29, 22 фев. 2020


= возможно, откат выстрела сделать, но чтобы была возможность
много выстрелов делать - пуле-стамину придумать, чтобы угасала
после какого-то уровня частых выстрелов.
Допустим, с интервалом срабатывает тригер - на него можно любое повесить.
Как-минимум, отнимать монетки - нет монетки при этом тригере - не
вылетает выстрел.
Пуле-стамина быстро регенится.
// Эти пульки друг-на-друга влияют - куда-то улетают - на этом
// можно делать всякие точ-филды для пуль _не_доступные_по_прямой.

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

#8
18:29, 22 фев. 2020

// --- вечер на исправление тайлов..
Двойной клик на TilesetEdit.tscn
Отрылась сцена, где готовили тайлы.
Всем чилдам базовой ноды (Node) (спрайтам: Floor, Edge ...)
выставить галочку Region:Enabled = true, и тогда будет виден чистый
набор тайлов без отрисовки лишнего.

Открываем опорную текстуру tiles_demo.png внутри проги GIMP.
Выставляем меню Вид: Показать сетку = Да.
Заходим в настройку Изображэние: Настроить сетку - выставляем 64*64.
Видим, что тайлы плотные - нужно расшырять ...

В меню Изображэние: Размер холста, убираем линковку шыри и высоты,
и ставим высоту 512 - следим, чтобы пустое место было внизу - Готово.
После этого, делаем поправку Слой: Слой к размеру изображэния,
чтобы удобней было. Затем, копируем слой, и отключаем его видимость,
для визуальной сохранки. Между слоями, создаём новый слой,
где можно рисовать стрелочки переноса тайлов на новые места.
// Изображэние: Режим: RGB
// Я подумал, что индексный цвет мне не подходит.
// Добавлю градиента, потом - будет чуток пожывей.

В редакторе годота, каждый клик по спрайтам (Floor, Edge ...)
откроет внизу доп-окошко, где хорошо видно рамочку тайла поверх
полной текстуры - мы ясно видим тайлы - когда будет готов
новый расклад тайлов, нам нужно будет изменить позицию Региона
тем тайлам, которые попали в новое место.


Подготовка завершэна. Цель - перенос альфа-зависимых тайлов
на свободное место. И докраска краёв плотных тайлов, которые
граничат с пустым местом.

Тайл _солид (позиция 0, 64) - хочу его на позицию 64, 128 + 64 (192).
Увеличиваю масштаб, чтобы точно выделить нужный кусок. Копирую,
и вставляю на нужное место - меняю слой - выбираю карандаш (черный),
и пишу кое-как _солид, чтобы отметить новый тайл. Потом, вокруг
этого тайла вставляю 5 таких тайлов
(вставил, подвинул, якорь - прикрепить плаваюший слой).
Отметил вертикаль - убрал все новые пикселя, кроме правого края.
Отметил горизонталь, под новым солидом, и убрал почти всё, кроме
тонкого края внизу - надо помнить, что там как-бы занято - можно
нарисовать красную черту, в слое _пояснялок.

Прокликиваем в годоте тайлы, и видим, что справа, есть двойка
Ceiling
CeilingWall
Как-минимум, CeilingWall можно переставить ...
Там ясно видно, что перенести надо все тайлы, справа, от дерева.
// Верхний тайл (над Ceiling) не используют, хотя он брат Ceiling,
// и его можно переставить, и внедрить, как новый тайл.
// Слева от Ceiling некий переходный тайл - пусть будет не используемым.

Тайл (над Ceiling) переносим под тайл Рамп, слева приделываем то,
что было справа от дерева, а справа - Ceiling & CeilingWall.
Но всё-таки, всю эту кучку новых тайлов сдвигаем на 2 тайла вправо.
Тайл (над Ceiling) - надо убрать два пикселя в самом низу, чтобы
они не могли мелкать, при отрисовке WallDeco.
// Можно вернуть нижний край, под _солид.

Ставлю PlatformEdge над CeilingWall.
Но сдвигаю PlatformEdge на тайл правей, а над CeilingWall
копирую верхний край этого-жэ тайла.
И левый край PlatformEdge копирую влево.

PlatformFloor переносим вниз.
Floor копируем вниз.
И вокруг них края дублируем.

Floor( 64, 6 * 64 = 384)
солид( 64, 3 * 64 = 192)
PlatformFloor( 6 * 64 = 384, 6 * 64 = 384)
PlatformEdge( 7 * 64 = 448, 3 * 64 = 192)
WallDeco( 3 * 64 = 192, 5 * 64 = 320)
CeilingWall( 6 * 64 = 384, 4 * 64 = 256)
Ceiling( 5 * 64 = 320, 4 * 64 = 256)
Ceiling2( 4 * 64 = 256, 4 * 64 = 256) // оставить без колизий.

// При экспорте нового тайл-мэпа, порядок тайлов изменился,
// потому-что добавил тайл копированием, и забыл его вниз поставить.
// Снова загрузил - переставил, сохранил сделал ре-экспорт без _мегрэ,
// и всё вернулось - старый тайл-мэп исправился.

#9
23:34, 22 фев. 2020

Не хватило терпения на чтение.
Структурировать бы все это и по спойлерам разложить.

#10
0:39, 23 фев. 2020

programina
гы-гы.
Не надо ничего читать здесь - всё сыро и мутно :)
Не отвлекайся от своего проекта - я наблюдаю и радуюсь твоим успехам.

#11
4:12, 23 фев. 2020

я тоже проскроллил сразу на комменты

#12
21:17, 23 фев. 2020

// ---
// ночной цвет - для рыжого тайлсета норм. гы-гы
7bb8ff


// --- надо сделать такую связку базовых нод, чтобы пост-обработка была.
Создаём сцену - там базовую ноду выбираем, и добавляем вьюпорт и прямуг.
Эту сцену сохраним, как Main.tscn и сделаем её умолчанкой, чтобы
вся игра начиналась с неё. В меню, можно сделать кнопки, которые
будут загружать нужный этапчик - ту сцену, которая изначально в демо была.

Node
+ Viewport2 // он сам найдёт камеру в этапе // он вышэ, чем TextureRect
++ сюда загрузка ноды этапа (Viewport2.add_child этап_такой_то).
+ TextureRect // текстуру --> Viewport2 // в материал, шэйдэр лепить.
+ здесь панель индикаторов игры.
+ здесь панэль меню-опций.
// панэли друг-друга отключают, наверно.

В каждом этапе повторяем строение изначального этапа - обязательно
подгрузить готовую сцену Player, и проявить заботу о нодах _телепортов.

Чтобы редактировать этап - надо открыть его сцену в годот-редакторе.
А чтобы его тэстировать - запуск игры, и надо нажать кнопку меню ...
Но меню долго делать, и поэтому можно тупо менять название
нужного этапа в скрипте Main.gd

var current_scene = null

func _ready(): # проца, которую скрипт вызывает автоматически.
  var s = ResourceLoader.load( "Stage1.tscn") # <---- вот здесь.

  if not s: # не загрузилось
    print( "error")
    get_tree().quit() # фаталити, закрываемся
    return
  current_scene = s.instance()
  $Viewport2.add_child( current_scene)
  #get_tree().set_current_scene( current_scene) ???
  
  // здесь можно найти ноду Player, и добавить ему какой-нить предмет,
  // который выгодно иметь на этом этапчике.
#---------

#13
22:29, 24 фев. 2020

Возникла проблема со свойством include_scene_to_parent,
но показалось, что надо пробануть краткий вариант названия.
Ага - ошыбка ушла - всё заработало,
хоть и осталось мутное предупреждение.
Сделал _экспорт (подобие компиляции) == всё работает.
Буду считать, что готова версия 101.

Код важных файлов таков..

# file Main.gd
extends Node2D

onready var stage_root = $Viewport2

func _ready():
  g1.include_scene_to = stage_root # warning, но пофиг

  # для нужд быстрого тэстирования, грузим этап..
  g1.include_scene( "Stage1.tscn", 1)
#---------

# file global.gd  // call g1.an()
extends Node


var current_scene = null # не используем.


var position1_name := "-"
var position2_name := "-"
var camera_low_name := "-" # нода для лимита движухи камеры вниз.
var camera_rit_name := "-" # нода для лимита движухи камеры вправо.
var my_scene = null

var include_scene_to = null # private. // include_scene_to.add( my_scene)
#var include_scene_to_parent == error
# Наверно, нельзя использовать длиные имена свойств - их перестают видеть.




func _ready():
  var root = get_tree().get_root()
  current_scene = root.get_child( root.get_child_count() -1)
  # get_tree().set_current_scene( current_scene) ???

#---------




func current_scene_load( path):
  call_deferred( "_deferred_current_scene_load", path)
#---------


func _deferred_current_scene_load( path):
  if current_scene:
    current_scene.free()
  var s = ResourceLoader.load( path)
  if not s:
    return
  current_scene = s.instance()
  get_tree().get_root().add_child( current_scene)
  get_tree().set_current_scene( current_scene)
#---------




func include_scene( path, err_is_fatal: int = 0):
  call_deferred( "_deferred_include_scene", path, err_is_fatal)
#---------


func _deferred_include_scene( path, err_is_fatal):
  if not include_scene_to:
    print( "ERR: init include_scene_to")
    if err_is_fatal:
      get_tree().quit()
    return

  var s = ResourceLoader.load( path)
  if not s:
    print( "ERR: location_name not found")
    if err_is_fatal:
      get_tree().quit()
    return

  if my_scene != null:
    my_scene.free()

  my_scene = s.instance()
  include_scene_to.add_child( my_scene) # it is not current_scene.


  # --- extra
  var b = my_scene
  if position1_name != "-":
    var n = b.find_node( position1_name)
    var a = b.find_node( "Player")
    if a and n:
      a.position = n.position

  var camera = b.find_node( "Camera") # Camera2D
  if camera:
    if position2_name != "-":
      var n = b.find_node( position2_name)
      if n:
        camera.position = n.position

    if camera_low_name != "-":
      var n = b.find_node( camera_low_name)
      if n:
        camera.limit_bottom = n.position.y
    if camera_rit_name != "-":
      var n = b.find_node( camera_rit_name)
      if n:
        camera.limit_right = n.position.x
  else:
    print( "not found Camera")
#---------

#14
22:51, 24 фев. 2020
# file coin_exit.gd
extends Area2D
class_name Coin_Exit # точ-филд выхода из локации

var taken = false
export var next_name := "an" # next location scene_name.
export var pos_name := "-" # название ноды, куда поставить игрока.
export var vis_name := "-" # название ноды, куда поставить камеру.
export var vis_low_name := "-" # название ноды, чтобы ограничить камеру вниз.
export var vis_rit_name := "-" # название ноды, чтобы ограничить камеру вправо.

func _on_body_enter( body):
  if not taken and body is Player: # не_взято и косание_игрока
  #{
    ($Anim as AnimationPlayer).play( "taken") # "fade_screen"
    taken = true # взято
    g1.position1_name = pos_name
    g1.position2_name = vis_name

    g1.camera_low_name = vis_low_name
    g1.camera_rit_name = vis_rit_name

    g1.include_scene( next_name)
  #}
#---------
Страницы: 1 2 3 4 5 Следующая »
ФлеймФорумПроЭкты