Архивчик исходников - версия 121
// ---
1. Этапы st021 и st041 - поменял выдачу талантов (21 даёт пасивки),
и поставил откат в 360 секунд
2. coin_exit.gd :: next_name должно иметь три буквы, минимум.
3. Сложности по теме g1.ijg_shadow_hand
area_item.gd
AreaBox.gd
coin_exit.gd
Допустим, что група обязана реагировать лиш на одну функцию.
По факту использования абилки Просветка - внутри функции проверят
связь с требованием теневой руки, и попадание в радиус (от робота).
Если всё сошлось, то меняем свойства (или подмена ноды).
Теневые ресурсы должны стать простыми ресурсами, с единичкой.
Теневой выход должн стать простой монеткой.
4. Теперь, первое перекачивание опыта в колокол базы (st018), будет
всегда выдавать бонус-раунд, и страницу про детали перекачки опыта.
5. Сделал набросок функций перебирания предметов, и читания подсказок
для предметов (если у них есть нужные файлы). Если активировать книгу,
то внизу можно читать очередную страницу - вникать в правила, и в сюжэт.
6. Набросал сложный путь в этап st047.
7. Создал забавный склад древесины в st022.
8. Давно хотел добавить срез волны в полёт пулек.
Новое свойство tangent_limit в файле DmgFly.gd
нужно назначать, учитывая значение в tangent_len.
Тоесть, назначим волну в 64 пикселя (tangent_len = 64),
и поставим tangent_limit = 32, чтобы срезать половину гребня волны.
// я не специалист, и возможно, у меня корявая реализация,
// но пулька летает, как я хотел.
9. Добавил свойства ( Final_event, Mid_vis_event)
в скрипт AreaBox.gd, и подправил там код,
чтобы явно назначать промежуточную и финальную пыль-анимацию.
Скрипт Dust.gd получил возможность затемнять экран.
// Все этапчики докручивают тёмный экран до _нужного цвета, при старте.
// Coin_Exit давно имел свойство vis_name - теперь оно работает.
// Ноде VisMix можно выбрать цвет modulate,
// чтобы экран этапа был таким, как указано в этой детальке этапа.
// VisMix.rotation_degrees - секунды, за которые докручиваем цвет,
// начиная от изначального черного экрана.
10. Добавил свойство shop_just_mon
в скрипт area_item.gd , чтобы гибче была трата монет (и легче магазины).
Можно не создавать отдельную заготовку (shop_zag_n оставить нулевым).
11. Сделал копию st031 --> st031e, но входов туда пока нет.
12. Поправил (увеличил) ноду Enable на всех версиях Enemy (панцири).
На красных оставил малый прямуг, чтобы их падения остались актуальны.
13. Повторно бутыль из лабы не взять - исправил.
(v122) Архив исходников для Godot
1. Внедрил новую связку скриптов..
chain_holder.gd // рельс и сборник элементов (вагоны на рельсе).
chain_h_elem.gd // элемент для механизма chain_holder.
На их основе, планирую делать конвеирные ленты,
и замороченые комнаты - успел убрать цветные шарики - открыл дверь.
// Получился глючный механизм. Возможно, так и надо - это не симулятор.
2. Для этапа st026 сделан отдельный пресет (const rail_gen__st026 = 5),
и можно открыть дверь - смотри свойства, и будет ясно чего требуют.
Этапчик st041 - здесь проба конвеирных лент.
3. Появилась возможность менять направление стрельбы.
Скрипт player.gd пачка свойств, начиная с "aim_stand".
Нужно нажать кнопку стрельбы, когда нет нажатия прыжка и движухи,
и дожать кнопки вправо или влево - будет проявлена спец-указка.
4. DmgRay получил обнову скрипта, и
выпускает пульки по герою, если 4-й пресет назначен (spawn_preset).
Слегка глючит загрузка Coin/RayToTarg, но это не сбивает работу игры.
Печатают про повторную привязку сигнала body_entered.
Можно сделать "Make Local", чтобы глаза не мозолил красный debug.
Хотя сбоя в скриптах нет - можно не делать "Make Local".
5. Внёс литературный текст первых книжных страниц (предметы 801-805).
Для замены текста, надо узнать номер предмета под эту страницу
Например, 801 - это первая страница в книге базы. Открой файл
items/ru/801.txt
и замени там вторую строку, в которой весь текст страницы.
В третьей строке - необязательный путь к ресурсу картинки.
Уместно, открыть паралельный файл, на другом языке
items/en/801.txt
и продублировать смысл (литературы или игрового совета).
6. Не выпускаем игрока на стены базы, если не взят тэт-пульт.
Возможно, косание предмета _каркас_шита будет стартовать мини-игру.
Если провалить игру, то нет событий, а если исполнить условия,
которые не ясны, но можно угадать - добавить игроку порцию опыта.
7. Печатаем название файла этапа (меню, схема), чтобы знать _где_мы.
Main.gd $Menu/tab3_piv/LabRegion
Когда-нибудь, сюда надо будет печатать нечто..
"Родная база - Кузня"
"Родная база - Сэйф-башня" // приёмник опыта
"Регион: Неизвестно" // в хаос-порталах
Из какого источника брать литературное название этапа ?
Вероятно, из языковых файлов msg_mix.txt
8. Этап st017 - вернул декоративный лифт на место (рядом с _зачистить).
// --- v123 (2020 август 22)
1 EN.
Replaced several functions in the script chain_holder.gd
Perhaps collecting lines from colored balls will be more correct.
1 RU.
Заменил несколько функций в скрипте chain_holder.gd
Возможно, сборы линий из цветных шариков будут правильней.
2 EN.
New function player.gd :: try_start_alt_gren()
# If you are not equipped with a Gunner_talent,
# and if alternative action starting fire-bullets,
# and if you enabled targeting by alternative action button,
# then you can press the jump signal, and the grenade will launch.
2 RU.
Добавил функцию player.gd :: try_start_alt_gren()
# Если не экипирован талант Пулемётчик,
# и если альтэр-действие запускает огне-патроны,
# и если включили прицельность, зажав кнопку альтэр-действия,
# то можно дожать сигнал прыжка, и будет запуск гранаты.
3 EN.
edited several game locations (stages).
And added a lot of experience chests.
3 RU.
отредактировал несколько этапчиков.
И добавил много сундуков опыта.
4 EN.
Level st031 now generates apples (falling from above).
You can get wounds, and somehow add a counter of apples ...
But the apple_counter is blocked - try visit the st034 stage.
Now you can enter to the st031e stage.
4 RU.
Этапчик st031 теперь порождает яблоки (падают сверху).
Можно получать раны, и кое-как прибавлять счётчик яблок ...
Но счётчик яблок заблокирован, пока игрок не получит квэст на яблоки.
Допустим, что для снятия этой блокировки, надо посетить этап st034.
// Взять ключевую страницу для книги биологии.
Теперь можно попасть в этап st031e
5 EN RU.
A trigger_gift to "g1_res" now passes through the rand_del() filter,
this allows you to set up a random refusal to issue a gift.
Триг-подарок на имя g1_res теперь проходит через фильтр rand_del(),
что позволяет настроить случайный отказ выдачи подарка.
TRIG_GIFT to_name == "g1_res" // gt.rand_del( ext)
Свойство тригер.ext как 4: 20% шанс получить подарок.
3: 25%
2: 33%
1: 50%
0: 100%
-1: 100%
-2: 66%
-3: 75%
Prop trig.ext as -4: 80% chance to get gift.
6.
player_kin.gd получил дублирование механизма стрельбы из player.gd
// player_kin скользит, и взятие талантов можт быть проблемным.
Исправил взятие талантов - теперь, если талант справа от робота,
то ставим талант в правый слот - так наглядней.
// Подсказки поменял (msg_mix.txt 52 54)
// Исправил.. on the bottom left, bottom right (msg_mix.txt 51 53)
7.
Сделал простой пример видео-вставки на базе этапа st005.
Там нет видео-ролика, но зато выдан текст, дублируя страницу книги.
В скрипте uprav.gd :: внутри функций проверки сигналов..
if gt.blocking_d_control: return false
8.
Внедрил предмет горшок1, и рецепт для него (яблочная фабрика).
Кое-как заскриптовал фермерскую грядку (внизу этапа st011).
Добавил скрипт glob3.gd - функции контроля грядки и кибер-цветка.
Можно туда перенести часть функций из global.gd
st0XX.gd :: _ready call glob3.free_coins_layer__pulse( 500)
Так можно контролировать выдачу монет внутри часто-проходных этапов.
9.
Добавлена страница про важную деталь лом-турели (файл 806).
Добавлена страница (файл 871), но текст сразу придумать не удалось.
Теперь предмет-рецепт печатает формулу - требования для создания.
И его активация выставляет его в соло-слот - после этого можно начать
мини-игру - были убраны две линии сразу - рецепт пробуют использвать.
Стрелочка указывает на предмет, для которого печатают пано-пояснялку.
10.
Мелкие добавки в скрипты ... (можно найти по сочетанию v123).
Например, теперь печатаем в лог требование ключевых предметов,
если у игрока нет нужного ключа.
global.gd :: collid_body_is_player
Архив исходников для Godot GDScript
// --- v124 (2020 август 29)
1 EN.
Little evolution - "items/an_init.tscn" scene appeared.
Means a visual table of templates, inside the Godot editor.
Use items/init_eff.tscn and similar files with the prefix "init_".
1 RU mix.
Маленькая эволюция - появилась сцена items/an_init.tscn,
которая означает наглядный стол заготовок, внутри редактора Godot.
К этому столу, набросал типажы..
items/init_eff.tscn // свойства эфекта проецируем на t_item_jg.gd
и другие, которые начинаются с приставки init_
Удалил много файлов с числовым названием (их инфо внутри an_init.tscn),
и удалил эти файлы (deleted files)..
msg_mix.txt // эти строки можно найти в Main.tscn (en, ru: TextEdit)
tool_lang_zag2.gd
tool_tab_zag2.gd
zag_ifc.gd
zag_ifc.tscn
zag_nhi_en.tscn
zag_nhi_ru.tscn
2.
Определено 4 эфекта (4 effects defined)..
globals.gd ::
ijg_eff__force_jump // вжык - добавка скорости движухи.
ijg_eff__dash_dive // паралель - наверно, игнор урона, с неким условием.
ijg_eff__restore_armor // страж - срез урона по помошникам.
ijg_eff__defense_up // срез == замена var ab__defense_up_time
// the new implementation of the talent "defense_up"..
glob3.gd ::
defense_up__absorb_dmg // новая реализация таланта defense_up
defense_up__absorb_dmg__test() // печатаем в файл an_test.txt
3 EN.
Now any book page will add 3 experiences and 3 coins one time.
808 ( about the cog of aiming)
811 ( magnetism, removed the wall of boxes) // lucky drop
841 ( the hint and the lyrics about torches) // xray
3 RU.
Теперь любая книжная страница разово добавит 3 опыта и 3 монеты.
808 ( про винтик прицельности)
811 ( магнетизм, убрана стена яшиков) // подкова удачи
841 ( намёк и лирика про факелы) // просветка
4.
# if the key is like a talent, then the talent must be equipped.
// если ключ, как талант, то талант надо иметь экипированым
global.gd :: collid_body_is_player
global.gd :: is_ok_ijg_key( ijg)
5.
use_xray_group_name
If you need to make an invisible item that will unveil,
using the Xray ability, then ...
add the instance "coin/ArItemUseXray.tscn"
Если автору этапа нужно сделать невидимый предмет, который проявим,
использовав абилку Просветка, то такие действия..
= добавляем сам предмет (любую версию со скриптом area_item.gd),
ставим его на нужное место, и отключаем ему видимость.
= копируй в карман "use_xray_to_show" (без кавычек, из glob2_t)
= лезем в раздел Node:: Groups --> вставляй название из кармана,
в пустую строку, и жми Add (когда предмет был выбран, в дереве сцены).
// Запускай игру, указав тэст-загрузку нужного этапчика,
// и внедрив абилку Просевтка, из скрипта, для нужд тэстирования.
Архив исходников для Godot GDScript
// EN --- v125 (2020 september 6)
1. 2. 3.
Combined functions that add items.
Now, there should be fewer errors.
Items like filters introduced (area_item.gd :: shop_zag_n + zag_nom).
Updated the experience barrels ("zag_nom" became 53 everywhere).
They will have an auto-ban on re-taking.
The "area_item.gd :: filter_shop_go_to( body)" function
left the sketches of old stores, and took on the role of
collection for all items-filters.
An example of a new item is "ijg_tal_pas_up".
When adding new filter, you need to create
case inside function "filter_shop_go_to" (to block receiving item),
and case inside "g1.unit_take_gift_q"
(for the implementation of non-standard receiving).
st001 = created 2 same item (ijg_tal_pas_up), for testing.
For some active talents (example: ijg_abil__defense_up)
I plan to create a special power-up - it will be rare, for balancing.
# item_shop.zag_nom = ijg_tal_pas_up
# item_shop.shop_zag_n = ijg_tal_pas_up__uniq1
#
# item.zag_nom = ijg_hit_points_up
# item.shop_zag_n = ijg_hit_points_up_uniq2
This principle of new unique items - the item itself, and its filter,
which controls the prohibition of re-taking.
4.
Voyage-voyage.
Cells for important scenario checkboxes..
ijg__val[ ijg_bos_swamp_idol]
# Eternal stump, in the swamp - it can be defeated once,
# and it will give the player a free "slot-A-greeny".
# Or buy this slot for coins - it's nice to have 2 slots at once.
ijg__val[ ijg_bos_green_mutant]
# zelenych - our impudent brother - if the player is experienced
# and agile, may kill a mutant - the rejection of a easy game scenario.
ijg__val[ ijg_bos_home_siege]
Looking here, you can see several States..
= the player did not hit the triggers that start the siege.
= the player must help their home base to survive.
= well done (otherwise, the game is over).
We can assume that after the siege, in the game, start the second act.
Give to player about 1000 experience,
and open a couple of directions of the game world,
in which you can create about 50 stages.
5.
The mechanism chain_holder.gd updated.
Now it's easy to make a waterfall there, and so on.
For example, I created two complex prefabs that use
special functions for generating undulating slope:
preset_st025_1() // Load instance: platform/rock_water1.tscn
chain_holder.gd :: preset_st025_2() // platform/rock_water2.tscn
Chain_Holder2 (inside prefab)
property rail_gen = 7 # preset_st025_2()
rail_gen_q = 652 # 25 balls * dia_26 + 2 safety.
sprites_gap = 0 # dont draw rail.
use_mini_game = off
elem_motor = 3 # a tangle of water particles
spawn_par_drop = 2 # 2 bullets, on start new lap (on rail end).
Examples of using a prefab with a waterfall.. st025, st043, st044.
6.
New pages..
842 // separated
809 // quick start
7.
Fixed shooting (player.gd)..
g1.ijg__val[ g1.ijg_page__aim_stand] > 0
// RU --- v125 (2020 сентябрь 6)
1. 2. 3.
Микс обновления предметов.
Соединил функции, которые добавляют предметы.
Теперь, ошыбок должно стать меньшэ.
Появились предметы-фильтры (area_item.gd :: shop_zag_n + zag_nom).
Обновил бочки опыта (zag_nom везде стал 53).
У них будет авто-запрет повторного взятия - не надо следить вручную.
Функция area_item.gd :: filter_shop_go_to( body)
оставила наброски старых магазинов, и приняла на себя роль узла
для всех предметов-фильтров. На примере нового предмета ijg_tal_pas_up,
можно увидеть, что при добавке нового фильтра, нужно для него создать
кейс внутри filter_shop_go_to (для блокирования получения предмета),
и кейс внутри g1.unit_take_gift_q (для реализации спец-получения).
Хотя, кейс для g1.unit_take_gift_q можно не делать, если предмет
стандартно прибавляем-убавляем, учитывая свойство bank_max.
На пару версий, в первом этапе, создал 2 предмета ijg_tal_pas_up.
Можно тэстировать не-повторяемость, или логичную блокировку, когда
у игрока пустой слот пасивного таланта.
// ijg_tal_pas_up усиляет экипированый пасивный талант, кроме
// перевода на максималку. Это даст игроку стратегию развития талантов.
Для некоторых активных талантов (например, для ijg_abil__defense_up)
планирую создать одну или две личных усилялки - это будет редкость,
и планирую, что такие предметы нужны авторам игры, для балансировки.
# item_shop.zag_nom = ijg_tal_pas_up
# item_shop.shop_zag_n = ijg_tal_pas_up__uniq1
#
# item.zag_nom = ijg_hit_points_up
# item.shop_zag_n = ijg_hit_points_up_uniq2
Такой принцип новых уникальных предметов - сам предмет, и его фильтр,
который контролирует запрет повторного взятия.
4.
Вояж-вояж.
Выделил ячейки под узловые сценарные галочки..
ijg__val[ ijg_bos_swamp_idol]
Вечный пень, на болотах - его можно один раз победить, и тогда его
магазинчик выдаст игроку безплатный "слот-А-зелёный".
Либо купить этот слот за монеты - иметь 2 абилки сразу.
ijg__val[ ijg_bos_green_mutant]
# зеленыш - наш наглый брат - если игрок опытный и ловкий, то можно
# убить мутанта - отказ от лёгкого варианта пары сценарных узлов.
ijg__val[ ijg_bos_home_siege]
Заглядывая сюда, можно видеть несколько состояний..
= игрок не задел тригеры, которые начинают осаду.
= игроку надо помогать родной базе, чтобы выжыть.
= игрок справился (а иначе - игра закончена).
Можно считать, что после осады, в игре, начался второй акт сценария.
На радостях, выдать игроку около 1000 опыта, и открыть пару
направлений игро-мира, в которых можно создать около 50 этапчиков.
5.
Механизм chain_holder.gd получил усиление.
Теперь там легко сделать водопад, и подобное.
Надо создать узел Node2D, переставить новый узел на место chain_holder,
и перенести (re_parent) chain_holder в чилды Node2D.
Теперь можно добавить DmgFly (re_name) и пере-именовать в Drop.
При выходе на очередной круг, будем порождать копию get_parent.Drop
// Возможно, надо добавить возможность дублировать RigidBody as Drop.
spawn_par_drop // новая пачка свойств
try_spawn_drop__empty_pool // новая функция
gray_wall.png // новая повторяемая текстура, и несколько подобных
Для примера, я создал два сложных префаба, которые используют
особые функции генерирования волнистого склона..
preset_st025_1() // Load instance: platform/rock_water1.tscn
chain_holder.gd :: preset_st025_2() // platform/rock_water2.tscn
Chain_Holder2 (внутри префаба)
свойство rail_gen = 7 # preset_st025_2()
rail_gen_q = 652 # 25 шаров * диаметр_26 + 2 единицы, для страховки.
sprites_gap = 0 # не рисовать сам рельс.
use_mini_game = галочка отключена, чтобы не создавать лишних тормозов.
// спрайты частиц воды тормозят - особено внутри DmgFly _поток_вниз.
Свойство elem_motor = 3 # клубок частиц воды
spawn_par_drop = 2 штуки - поискать у родителя Chain_Holder2, детку
с названием "Drop" - создать две таких копии, когда элемент цепи
попал в событие выхода на свой очередной круг, по рельсу.
// создать очередной кусок потока вниз - для плотности, каждый Drop
// летит с замедленой скоростью, но внутри него, быстрые спрайты ...
Пере-именуй Drop --> DropT, DropTest --> Drop, чтобы увидеть поток
с другими спрайтами (а потом, не забудь вернуть названия обратно).
Drop.proc_to_player = -1 # low_jump без Drop..react_name == "player"
// DmgFly не задевал one_way платформы, на основе StaticBody2D.
// Я внедрил задевание StaticBody2D, но поставил там сомнительную
// рулетку - вероятно, она можт спасти быструю пулю.
// А медленая пуля будет лететь несколько кадров через StaticBody2D,
// и вызовет рулетку много раз - наверно, потом уберу рулетку.
Примеры использования префаба с водопадом.. st025, st043, st044.
6.
Новые страницы..
842 // separated
809 // quick start
Несколько страниц надо создать и связать с пасивкой Мусоршик.
Это набор дополнительных пояснений по сложным талантам.
Тоесть, Мусоршик взял на себя роль помошника по игре.
Пусть игрок слегка усилит этот талант, и будет встречать
аптечки (безплатные). Почти на каждом этапе - облегчалка.
А если игрок прочитал страницы к талантам, и наловчился избегать
лишних ранений, то можно начать игру заново, и усилять какие-то
другие таланты, со знанием их особеностей.
Выставить два первых примера, которым не важна степень усила таланта.
Аптечка в st019, и страничка в st013.
И когда-нибудь, остальные добавлять.
7.
Исправил стрельбу, чтобы не реагировало на негативное значение..
(player.gd)
g1.ijg__val[ g1.ijg_page__aim_stand] > 0
Архив исходников (15 мегабайт) для Godot GDScript
// --- v126 (2020 сентябрь 13)
1.
Подправлена пропечатка в лог (много мелочей).
Печатаем в лог прибавку особого опыта, который не проходит
через функцию gt.one_way_add_exp .
Усиление пасивки, от спец-предмета, прибавит немножко опыта.. ijg_tal_pas_up: gt.one_way_add_exp(5) Покупка брони в магазине, прибавит динамический опыт.. gt.one_way_add_exp( ijg__val[ ijg_armor_shard_max])
2.
chain_h_elem.gd :: _on_body_entered
Если игрок коснулся - снижаем силу прыжка, как от стрельбы и воды.
// новые узлы-соседи особого наименования для chain_holder:
Quad (Sprite)
Icon (любой тип - спрайт, частицы, монеты, предмет ...)
Вариант одинокого спрайт-колеса из chain_holder (st051).
// Возможно, это намёк на диск с ковшами-зубцами == мини-бос.
Новые префабы, на основе chain_holder:
platform/dirt_line.tscn (пятна из взрывчика eff/impact_8f_smo.png)
platform/dirt_boom.tscn (пятно взрывчика, и добавка дымка)
platform/flower_wing.tscn (изогнутая подвеска из вьюнов green-iv8.png)
platform/flower_line.tscn (клумбы из p_flowers64.png, и подобных кустов)
Вдобавок, разбил 64 цветка на 4 текстуры по 16 (p_floX_16.png).
3.
Рецепт бура (этап st017) - исправлена добавка в сумку.
// Надо выбирать огне-патроны, чтобы соло-предмет не убирали из сумки.
Подправлены функции, чтобы реагировать на негативные прибавки..
gt.one_way_add_gold
gt.one_way_add_exp
gt.one_way_add_wood
gt.one_way_add_ore
gt.one_way_add_diamond
4.
Если не двигать героя, и не прыгать, то угол стрельбы не меняем.
Это позволит один раз сделать наводку, и пулять по этому углу
простым повтором кнопки стрельбы (это очень удобно).
global.gd :: unit_take_damage_die
Теперь смерть робота отнимает единицу из индикаторов..
граната, лом, турель, соло-предмет, алмаз, яблоко, дерево, руда.
И вдобавок, недостачу опыта забирать из счётчика базы.
5.
global.gd :: player_port_pos
// запоминаем позицию героя в старом этапе, перед новым этапом.
Отвлёкся, и забыл - зачем я эту переменку внедрил.
Новость для нод с наименованием Teleport:
Если один из показателей масштаба меньшэ 0.5, (например 0.3),
то телепорт подразумевает работу с PlayerKin,
чтобы не пере-загружать этап, и оставить координату, от старой позиции.
Например, так можно переместить героя с правого края - на левый край.
Изменилась функция: coin_exit.gd :: _on_body_enter
6.
Установил новые показатели для приёма _быстрый_старт..
global.gd :: item_jg__first_time // quick start 180 секунд, не учитывая текстовой видео-ролик (не-пропускаемый ролик). 270 321 // у меня, 304 получилось - примерно, 16 секунд запаса. отрывок из кода: if not "Kino".visible: # если нет видео-ролика, то считаем секунды. game_run_time_qs += delta # Быстрому старту - отдельные секунды. if not "TetParent".visible: # если нет мини-игры, тогда global.gd :: play_otkat__proc_sens_pause # обновляем откаты.
7.
Новое свойство Need_key_val внутри area_item.gd
Теперь можно выставить требуемое количество ключа.
Например, уровень какого-то таланта, чтобы подобрать предмет.
Есть пример на этапе st016 (префаб background/garbage_mix.tscn)
8.
Редактировал некоторые этапы.
Квэст _зачистить, теперь не добавляет.. 5 опыта и 5 золота.
// это прибавлялось в скрипте st017.gd
//
// --- v126 (2020 september 13)
1.
Corrected the game-log (a lot of small things).
We print in the log an experience that does not use function
gt.one_way_add_exp.
Passive talent booster, will add a little experience: ijg_tal_pas_up: gt.one_way_add_exp(5) Buying armor in the store will add experience ( dynamic value): gt.one_way_add_exp( ijg__val[ ijg_armor_shard_max])
2.
chain_h_elem.gd :: _on_body_entered
If the player touches it, we reduce the jump force,
(same from shooting and water).
// new neighbor nodes with a special name for "chain_holder.gd":
Quad (Sprite)
Icon (any type)
Example of a lone sprite-wheel, based on chain_holder (st051).
// It's probably a mini-boss sketch (disk with buckets-teeth)
New prefabs, based on "chain_holder.gd":
platform/dirt_line.tscn (spots from the explosion "eff/impact_8f_smo.png")
platform/dirt_boom.tscn (decals of explosion, and smoke)
platform/flower_wing.tscn (curved line "green-iv8.png")
platform/flower_line.tscn (flowerbeds "p_flowers64.png", and similar bushes)
In addition, divided "p_flowers64.png" = 4 textures (p_floX_16.png)
3.
Recipe r_digger (level st017) - fixed bug "put in bag".
// It is necessary to choose fire-ammo (instead of a shot)
// so that the solo-item is not removed from the bag.
Tweaked functions to respond to negative values:
gt.one_way_add_gold
gt.one_way_add_exp
gt.one_way_add_wood
gt.one_way_add_ore
gt.one_way_add_diamond
4.
If you do not move the hero, and do not jump,
then the angle of fire-shooting does not change.
(this is very convenient)
In function: global.gd :: unit_take_damage_die
Now the death of a robot takes one unit from the indicators:
grenade, junk, turret (turel), solo-item, diamond, apple, wood, ore.
And in addition, we take the lack of experience from the "base" counter.
5.
global.gd :: player_port_pos
// remember the position of the hero in the old stage, before the new stage.
I got distracted and forgot why I introduced this variable.
News for nodes named "TeleportX":
If one of the scale indicators is less than 0.5, (for example 0.3),
then teleport means working with PlayerKin, so as not to reload the stage,
and leave the coordinate element from the old position.
For example, you can move the hero from the right edge to the left edge.
Changed function: coin_exit.gd :: _on_body_enter
6.
New metrics for taking benefit from _quick_start:
global.gd :: item_jg__first_time // quick start 180 seconds, excluding the text video clip (non-skip clip). 270 321 // I got 304 - about 16 seconds left. code: if not "Kino".visible: # if there is no video clip, then count the seconds. game_run_time_qs += delta # separate counter for _quick_start. if not "TetParent".visible: # if there is no mini-game, then global.gd :: play_otkat__proc_sens_pause # update the cooldowns.
7.
New property "Need_key_val" inside "area_item.gd"
Now you can set the required number of keys.
For example, the level of some talent to pick up an item.
There is an example at stage st016 (prefab background/garbage_mix.tscn)
8.
I edited some stages.
Quest _clean, now does not add: 5 experience and 5 gold.
// this was in the "st017.gd" script
Архив исходников (15 мегабайт) для Godot GDScript
// --- v127 (2020 сентябрь 20)
1.
Исправлено получение бутылки с водой (свойство eq_to = 17).
Выставил bank_max = 1, как умолчательное значение для страниц книг,
чтобы их добавка была вменяемой.
Вернул старое название бака опыта (этап st016),
чтобы тригер находил его.
(если менять названия - можно сломать связи тригеров)
Скрытый верхний банк (18-й этап) - выставил там хитрый приз.
Игроку надо подготовить свой визит в эту ловушку.
const TrigAct_Val_AreaItemDel = -1 // кейс удаляет предмет или пулю.
Разделил цену пластины брони (из магазина, или от абилки).
abil_armor_cost_base - базовая цена брони, от абилки - каждое усиление
таланта "Получить_броню", повысит эту цену на единицу.
Потому-что игрок получает сильный бонус для союзников.
Ярко снизил цену брони из магазина.
2.
У таланта Рывок-нырок заработал доп-эфект, начиная с 5-й степени.
(это секунда игнорирования урона).
Изменились функции реализации активных талантов..
g1.try_abil__force_jump
g1.try_abil__dash_dive
g1.try_abil__restore_armor ...
Талант пиротехник, с пятой степени == дроп из ледо-валунов.
Возможно, это не правильно, но это была быстрая мысль, когда
придумал изменить талант "Возврат на базу".
Абилка Возврат на базу 3+ == экипированая пасивка не пропадает.
5+ == экипированые абилки не пропадают.
Теперь пасивки и абилки могут пропадать от абилки _возврат_на_базу.
3.
// "Find in files" - удобный инструмент для осмотра проводки переменки
Образован скрипт t_hero.gd
Туда перебросил свойства игрока, из global.gd
Это подобно тому, что все эти свойства пере-именованы.
Поэтому, по каждому названию, был использован Поиск -> Find in files
Это важная ступень подготовки к внедрению сохранок.
4.
Схема региона 21 для этапов лесного хаос-портала.
Схема региона 31 для этапов лесной деревни.
Схема региона 35 для этапов болота.
Схема региона 41 для этапов хаос-портала горной скалы.
Проекция этапов на свою схему, как набросок,
поэтому могут быть разбросы и накладки (и не все этапы проецируем).
Настроил болотные телепорты, и поставил там супер-предмет - второй слот.
5.
Влияние на мини-игру с шариками.. chain_holder.gd :: _process
if use_mini_game: if g1.hero1.ab__shock_wave_time > 0:
не двигаем шарики, подобно лифтам - от шок-волны.
Соседний чилд Path - chain_holder копирует его точки, и стирает его.
Тэстовый пример есть в середине этапа st003 (потом удалю эти кривые).
// Надо выставлять rail_gen, как ноль, или как 8, чтобы рисовать рельс.
6.
Внедрил набросок достижэний (ачивок)..
ijg_ach__tet_star # 0/1 доиграть до тэт-звезды. // доступно
ijg_ach__bak_exp # 0/10 собрать 10 баков опыта. // доступно
ijg_ach__fire_boom # 0/1000 потратить огне-патроны. // доступно
ijg_ach__tal_set # 0/18 экипировать все таланты. // нельзя
ijg_ach__tal_max # 0/1 макс-усилить любой талант. // доступно
ijg_ach__tal_max_all # макс-усилить все таланты. // нельзя
Помимо весточки о рекорде, если есть место для текста, то можно
добавлять в ачивки подсказки, либо лирику.
Важно чтобы не было ачивок: пройти без смертей; пройти без сохранок.
7.
https://github.com/Gonkee/Gonkees-Shaders
Профи-туман на 4-м этапе (st004), в материале узла..
Stage/x_far/TextureRect
8.
Взятие боевого бонуса (g1.ijg_shoot_fast) повысит урон и скорость
стрельбы. В левом верхнем углу меню, будет иконка красного цвета.
Если тайлы сбились - наверно, формат не указан. Запомни название тайлмэпа,
чтобы найти его блок, в файле st0XX.tscn
и поставить там, перед строкой "tile_data" строку с первым форматом:
format = 1
tile_data = PoolIntArray( ... )
15 мегабайт Архив исходников для Godot GDScript
// --- v128 (2020 сентябрь 29)
Исправлена функция glob2_t.gd :: bag_clear
Теперь обнуляем ячейку g1.hero1.val_set( n.ijg_nom, 0) # v128
Исправлена функция st011.gd :: check_base_gift
Теперь правильно удаляем предмет для усиления стрельбы ijg_shoot_pwr.
Исправил, для шариков, соблюдение своей позиции в цепочке (chain_holder).
Глючило схлопывание, и я добавил блок if clap_color: # v128 ,
чтобы там проверить показатели, для надёжности.
Вход в виртуальную лабораторию через зелёный рельс шариков - загадка.
Props/GreenRail
Сделал набросок этапа "виртуальная лаба" (st014).
Сделал декор-префабы (папка background)..
BorPan
Gate1
GreenWall
Platform/LiftMini - лифт для узких мест.
Разделил исправил усиление пушки героя.
Скорость стрельбы (ijg_shoot_fast, ijg_shoot_fast_fin)
отдельно от
сила пуль (ijg_shoot_pwr, ijg_shoot_pwr_fin).
# Подробный текст читай в t_hero.gd :: player_dmg_x__power_up()
"coin/DmgFlyWave.tscn": слабая медленая пулька, в арсенале игрока.
Если талант Шок-волна 5-й степени, то обычную пулю меняем на волнистую,
которая летит сквозь стены. На 10-й степени, запуск трёх таких пулек.
g1.ijg_evil_gold_heart // засчитывать туда зло-качество
glob2_t.gd :: one_way_add_gold() --> evil_gold__try_exe()
// пере-именовал:
g1.tal_abil__player_has_ext --> g1.tal_abil__player_has
g1.tal_pasiv__player_has_ext --> g1.tal_pasiv__player_has
tal_ext_level_max --> tal_ext_offset_max
ext_level --> ext_offset
Этап st035e:
Пасивка-ап в пирамиде 35е.
Найди сенсоры, которые проявят Красный ключ (это страница).
Можно разместить в пирамиде штук 10 спрайтов разбитых компутеров,
чтобы намекнуть - талант Мусоршик здесь уместен.
Этап st033:
Там появился сенсор мини-игры, который требует взять новую страничку
"инструкция стройки моста", в соседнем этапе.
Успешный результат постройки моста сохраним в ячейку g1.ijg_bridge1
Зелёный ключ доступен, но если не выдавать игроку тэстовые ресурсы,
то надо накопить много древесины, чтобы построить мост.
v129 (exe win lin 32 64 + src)
v129 архив на itch_io
Есть сохранение игры в файл-слот.
// --- v129 (2020 октябрь 17)
1.
создал файл "game_spoiler.h" (сборник секретов и набросков для игры).
Это текстовой файл, но читать его удобней в редакторе для кода си.
2.
Исправил пару пробелов в скрипте global.gd
Ледышка внутри генераторных шахт мешает востановить тайл породы,
чтобы эту ледышку не трясло. # Используй поиск метки "v129"
Работают генераторы дерева и руды (из функции gt.gold_gen_in_process).
Исправлено добавление брони в функции g1.try_abil__restore_armor
Можно экипировать талант Получить_броню.
g1.player_level_up_x_tal()
if ijg == ijg_tal_drone_master:
hero1.player_turel_one_hits += 1
Можно экипировать талант Мастер_дронов, чтобы усилить его,
либо чтобы решать загадки, связаные с управляемым дроном.
Но пока нельзя создать никаких дронов.
3.
Тригер можт удалить любую ноду (case = 1, node_name, val = -1)
global.gd:: priv_trig_act
elif val == TrigAct_Val_AreaItemDel: # v129
targ.queue_free() # delete node any_class
Добавил свойство AreaBox.gd:: Need_key_val , и если оно большэ ноля,
тогда надо проверять заготовку (посмотреть свойство kill_on_use).
init_autouse.gd:: to_ijg
p.kill_on_use = 1
# Чтобы проверка ключей могла удалить яблоки, и подобные _счётчики.
# Потому-что все счётчики считаем расходниками, по-умолчанию.
init_gen.gd:: to_ijg
p.bank_now = 0
p.bank_max = 10 # чтобы срабатывала стандартная прибавка.
# Теперь этап st022 можт включить генерацию древесины,
# когда сработает тригер( add, g1_res, ячейка 23, 1).
4.
Добавил пару пресетов для разбрасывания колючек (enemy.gd):
const g1.war_type__thorn_x = 3 # во все стороны.
const g1.war_type__thorn_dn = 4 # колючки вниз.
enemy.gd:: spawn_ray_q := 0 # сколько колючек
enemy.gd:: spawn_ray_q_alt := 0 # альтэрнативное колво колючек.
5.
Редактировал этапы st034b, st034f.
6.
Локациям родной базы добавлены названия "x_ray/LabelStName".
Если сменить язык текста, то эти названия не обновят. Наверно,
надо использовать класический приём - печатать особый хинт в нижнем
углу экрана, первые 10 секунд после входа в локацию
"Локация: <название>" // Entering: MAIN TOWER
Укрепил функцию fgr_tet.gd:: fgr_start_pos_clr
Там стала пропадать середина фигуры - теперь ставим её отдельно.
7.
Внедрил систему сохранения игры в файл-слоты.
Когда герой впервые входит в локацию ГЛАВ-БАШНЯ, то происходит
единственое авто-сохранение. Для сохранения игры, герой должн задеть
сенсор около яркой капсулы (справа, в ГЛАВ-БАШНЕ).
// После загрузки игры, локация СКЛАД перекрыта, как в первый раз.
В свою сохранку (её нет в архиве) я наиграл около трёх часов.
8.
Страница мусорная (за 5+ мусоршика). "Возврат на базу, подробности"
st014
Там фэйковый Слот-А.
Кастинг - но получаем лиш единицу опыта ...
Вобшем, это зеленыш, как главный бесячий министр,
насовал своих подломов в систему, а система этого не видит.
Страничка "Слепая система"
// --- v130 (2020 дек1)
1.
Выставил страницу Привета, как предмет первого этапа.
<< Читай в паузе книгу: 'название' >>
Несколько раз, при взятии страниц, будет такой вариант подсказки,
а потом, будет напечатано лиш название страницы.
2.
В меню паузы добавлено много мелких деталей.
3.
Копировал этап st003 --> st023b.
Этап st023b пусть выдаст супер-предмет (откроет счётчик турелей).
Этап st023 дополнил врагами, и ресурсами (перезарядка ресурсов 20 минут).
Изменил этап st003, чтобы он стал легче и понятней.
4.
Main.gd:: start_screen__lang_upd --> update labels "x_ray/LabelStName"
AreaBox:: EvBox_boom_fake создаёт взрывчик "eff/SpriteBoom8.tscn"
const war_type__eq_gun = 5 # экипирован пушкой.
enemy.gd
5.
Внедрил в скрипт enemy/Turel.gd стрельбу из DmgRay.gd ...
Свойство anti_player должно позволить использовать турели
в арсенале игрока, или против игрока.
Сомнительный вариант _против_игрока, потому-что можно сделать enemy.gd
без движухи (стэйт_кор, аля деталь), и там большэ возможности пулять
разные пульки, включая вариант навесить чилдом DmgRay, аля орудие.
Надо оформить разворот в отдельное событие.
6.
platform/pir-base.png
Этап пирамиды (35 e).
Внедрил ноду вьюпорта, чтобы получить саб-этапчик _вид_сверху.
Один юнит патрулирует (бегает по набору точек).
Второй юнит подконтролен игроку - от сигнала Спец( шыфт), он ползёт к
сияюшей звездочке, в один из углов, который можно выбирать (вправо-влево).
Этапный скрипт проверяет позицию Агента, и можно убрать кирпич,
чтобы пройти внутрь верхней части пирамиды.
Если Агент попадает в ловушку, то экран саб-этапа исчезает.
Бесконечный сенсор сигналит Ekran.show - проходим саб-этап ешё раз ...
// --- v131 (2021 январь 16)
1.
Изменил цены (патроны за 15, вместо 10) (пластина брони за 5, вместо 3).
Талант подкова удачи - талант взял - монеты в лог печатает, но нет прибавки.
Исправил функцию gt.work_tal_lucky_drop (теперь нормально прибавляют).
fix function gt.work_tal_lucky_drop (add value).
В лог, печатаем прибавки от генераторов золота, дерева, руды.
fix function gt.gold_gen_in_process (print log).
После загрузки локации, обновляем слова.
И печатаем название локации, в которую вошли.
g1.inc_scene_ext_vis( ...)
call current_scene.start_screen__lang_upd() # v131
coin_exit.gd
export var Need_key_val := 0 # сколько ключей нужно,
# чтобы отнимать "бур", входя в генераторные локации.
2.
В архив, добавлена папка "jg_base" - шаблон для новых прототипов.
Надо создавать там новые предметы
(константы global.gd + пополнение нодами items/an_init.tscn).
И добавлять функции для новых предметов == новая игра, новый прототип.
Как начать освоение моей заготовки.
Скачай движок https://godotengine.org/
Вот здесь можно скачать мою заготовку игры для Godot.
https://gamedev.ru/flame/forum/?id=250273
Запуск движка, распаковка заготовки, импорт заготовки
(внутри папки jg_platformer найди файл "project"), запуск (Run).
Если не удалось поиграть (что-то не загрузилось),
то наплюй, и забудь - что-то не срослось - пробуй другие демки.
Если удалось поиграть, можно открыть заготовку для редактирования (Edit),
найти внутри проекта (FileSystem) папку "locations",
и открыть файл "a_stage_shab.tscn" (Open Scene).
Если на экране текст (это скрипты), то нажми вверху на закладку "L 2D".
Если видно небо, и мультяшные облака, то найди глазами таб "Scene",
и там найди строку (узел) с названием "TileMap" - кликни на квадратик,
который слева от названия - так мы выбрали _активный узел сцены, куда
мы можм вносить изменения, через таб-окошко "Inspector".
Найди там вторую строку, где напечатано "Tile Set [empty]" - кликай на
угловатую стрелку, справа, а потом на слово Load - откроем диалог
выбора спец-ресурса - надо выбрать что-то с названием Tileset,
например, "Tileset5.tres" - появится новая колонка (окно), где показан
набор тёмных квадратиков - кликай на любом, а потом кликай на разлинованом
"небе" - так ставим нужные квадратики, и составляем профиль этапа, по
которому предпологаем бегать прыгать (роботом, узлом под названием Player).
Наверху, меню Scene, там кликай "Save scene as", открыли диалог файлов,
и печатаем, например, "st007.tscn", чтобы дать _стандартное название.
После этого, надо найти и открыть файл "Main.gd" (закладка FileSystem).
На экране, виден текст (это скрипт) - серые строки не считаются кодом.
Кликай спец-меню "Search", строка "Find (найти)", и внизу, под текстом,
появилось поле ввода "чего надо искать" - туда надо вставить (копи-пасте)
строчку, которая напечатана здесь:
g1.my_scene__next_load( "st001"
Как только поле ввода заполнено, то текст сдвигают - в середине экрана
будет нужная нам строчка - кликай на диа-крестик, справа от "Whole Words"
(поле поиска закрываем). Надо убрать знак решотки (#), чтобы наша строка
стала светлой.
Вместо st001 надо поставить st007, чтобы игра грузила нашу новую локацию.
Важно внимательно посмотреть текст и проскролить его вниз до строки
#---------
Если встречаем светлую строку - надо в начале такой строки поставить решотку,
чтобы строка стала серой, и не мешала - там набор серых тэстовых строчек.
g1.include_scene( "st042", 1) # такая строка помешает.
#g1.include_scene( "st042", 1) # такая не мешает.
Подготовка закончена - кликай наверху "Play (F5)"
Жмём на клавиатуре Enter Enter Escape - попали в игру (небо видно),
но камера не двигается (это нормально). Закрывай окно с игрой,
кликай на название локации (вверху), или открой эту сцену, если закрыли.
В закладке узлов "Scene", надо кликнуть слева от названия "VisLow"
(на значке кольца), затем, в закладке "Inspector", кликаем по слову
Transform,
чтобы увидеть название свойства "Position", и поставить, вместо 594
(угрик зеленоватый), нужное число размера игровой области по вертикали.
Например, "y 2000".
Подобное надо сделать с узлом "VisRit", и вместо 747, поставить "x 2000".
Снова кликай наверху "Play (F5)". Попали в игру - камера двигается.
Но влево упирается - камера упирается в _нолевую вертикаль. Это значит,
что свою локацию надо развивать строить _вправо_и_вниз от нолевых осей
(от белого замочка на небе).
Узел сцены с названием "Teleport1" - это стартовое место героя-робота.
Когда избран этот узел (Teleport1), можно держать курсор над игровым
окном (там где небо рисовалось), и жать Шыфт + стрелочки, чтобы двигать
узел куда нужно, либо можно выставить точную позицию через "Inspector".
// Таскать зажатым курсором - не рекомендую - можно задеть лишнего.
//

// --- v132 (2021 январь 30)
PlayerKin.Sprite -> robot_demo2 // заметил, и поставил новую текстуру
DmgRay.gd:: try_spawn_df
Если аргумент меньшэ размаха луча, то взять радиус из луча + добавочка.
if radius < self.ray_gab.x:
radius = self.ray_gab.x + 64.0
24-й этап обновил.
27-й этап обновил - добавил тайлов, лифтов, простых врагов.
Добавил туда загадку "дерево дураков".
Можно внизу тумана добавить, но и без него нормально (небо тёмное).
coin.gd -> enemy_eat = 1 #Enemy можт скушать монету
(без ранения, без триг-сигнала, но со звуком).
platform/OneWaySpec.tscn // 3 tiles
platform/OneWayRail.tscn
OneWaySpecMin.tscn // tile
OneWayRailMin.tscn
OneWaySpecDbl.tscn // 6 tiles
OneWayRailDbl.tscn
//
platform/OneWaySpec.tscn
Жми сигнал "спец-шыфт", и робот проваливается вниз, с такой платформы.
g1.player_try_collision_1way_spec( player_self, one_way_body) # v132
Если у врага нолевой спаун_пресет, но есть spawn_pwr около 400,
то наш герой (Player.gd) пружынит на таком враге.
g1.player_try_enemy_bounce
// Если врагу отключить движуху, и заменить спрайт - можно делать трамплины.
Ставим spawn_pwr 500 и это даст шанс, чтобы запрыгивать на третий тайл.
Ставим 600 и на третий тайл пасивно залетаем, а иногда на 4-й тайл летим.
Тоесть, можно напрыгивать как-то особо, чтобы активно летать высоко.
Исправил файл enemy.gd
Работает const STATE_CORE = 2 # dont moving.
Можно подвесить к лифту, чтобы невидимый враг на лифте катался и бомбил.
// Лифт катается по реальным позициям - враг сам магнитится к позиции лифта.
Новый вариант порождения пуль, как с мельницы g1.war_type__thorn_r = 6
28-й этап обновил - усложнил.
По факту выхода из st028, вызвать триг-функцию, где вызвать это..
glob3.red_or_green_alarm_key( g1.ijg_alarm_key_green)
Минус все деньги игрока (это потом можно убрать, но была идея сюрприза).
Потом, игрок посетит локацию st011, и там авто-увеличит свой жызне-мер.
// и наверно, получит страницу пояснялку, мол это плохой звоночек.
// Вероятно, хаос-порталы не сработают, но надо их использовать,
// и найти ешё одно подтверждение.
26-й этап обновил..
player.add_collision_exception_with( static_body)
Вызов внутри этапного скрипта (_ready), чтобы рэльс был опорой
для всех, кроме глав-героя - и там рядом, мирный враг ползает.
Если врага убить - нет пути по рэльсу, а если подождать,
и проехать на враге - рэльс прошли - в важную часть локации попали.
Если рэльс длиный, и на нём несколько врагов в друг-друга упираются,
то игроку надо прыгать между врагами - чуть сложней.
А если враги пружынят, то ешё чуток трудней, наверно.
42-й этап обновил. (DmgFlyRain)
glob_rts.gd // Штабы, чтобы солдатики обменивались ударами.
kin_unit2D.gd // солдатик.
Хотел что-нибудь доделать, но скатился
к теме создания своего редактора кода.
Это набросок "блочного" кодирования (gate == if_else)

гы-гы
Тема в архиве.