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

Давний а1 (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
1:11, 12 фев 2021


// ---
// В старых набросках, падение с высоты ранит героя.
Допустим, героя (мутную робо-личность) не ранит падение с высоты.

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


// Главный герой, как цифровое вкрапление в аналоговую мозаику.


// --- система цифрового хлыста.
// Пять страниц-пояснялок для книги оформить.

1. Драйвер (эфект) первого сегмента хлыста.. риторика о том, что он даёт
"мас-урон" (который, в других играх, как умолчательный эфект хлыстов).

2. Риторика о том, что хлыст воспринимает свойство скорости маха.
Можно назвать "ловкий удар".
Тоесть, до этого сегмента - быстрые кулаки, и тормозной мини-мас-хлыст.
А с этим сегментом, чуем вкидывание в скорость маха - наверно, кастинг
удара делим на два - рубикон удобства. Ну и откат удара хлыстом уменьшаем,
в зависимости от свойства.

// Последния абилка, открываемая за достигание такого-то зрелого ранжыра,
// это "Мастер хлыста" - раз в минуту, вернуть сегмент хлыста.
// Свойство скорости маха уменьшает откат до 30 секунд, при макс-махе.


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

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

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


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

5-й сегмент порождает электро-шарик - пулька пролетает экран, до колизии.
Считаю, что надо пульку пускать прямо от локтя героя.

#31
1:12, 12 фев 2021


// ---

В целом, доволен текстурой камней основы "brick_form_mix3.png".
// Эту текстуру должны использовать лифты (platform/LiftRock.tscn)

Не стал делать дубль-тайлсэты, со сдвигом камней.

Выдал имена тайлам (можно это делать после создания тайл-сета).
И после этого создал отдельную сцену "platform/TSet_mix2_edit.tscn"
из которой сконвертил в ресурс тайл-сета "TSet_mix2.tres".
Получилось примерно 50 "камней":

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

0
1
2_gray_gla // серое псевдо-стекло // можно так отмечать убираемые камни.
3_yel_grad // жолтый градиент // плюс красный и зелёный // кладовые.

4_yel // скромный жолтый, с мини-рябью - для разны-образия.
5_bl_gla // самый тёмный кирпич-стекло // можно для убираемых камней.
6_bej // серая версия скромного жолтого - беж.
7_yel_pure // чистый ровный кирпич жолтого.

8_blue_n1 // noise1 // синий шум, вогнутый аквариум-ледышка.
9_blue_n2 // Такие планирую использовать в камено-ломнях (К3).
10_dark1 // тёмно-серый-1
11_green_n // зелёный шум, аля болотный

12_blue_n3
13_blue_p // синий ровный-чистый, с рамой (куб льда)
14_silver1 // условно серебряный - кирпичи-арки накладки поверх героя.
15_bro_n // коричневый шум // аля дерево-пень-бревно, но не обязательно.

16_dark2 // тёмный-серый-2
17_teal_p // яркая ровная бирюза (зелень + синь)
18_silver2 // серебро-2 чуток темней (верхний блик меньшэ)
19_gray_n // серый шум, бледная рамка // можно для убираемых камней.

20_Lift_G // бирюза для каких-нибудь хитро-чудесных лифтов.
21_Lift_Ro // светло-коричневый, с пятном, для обычных лифтов.
old_gray1 // нечто-мрамор серый - 65 на 49 пикселей, но это не важно.
old_gray2 // вариация мрамора

24_1_spec // обычный // "спец" == с него можно спрыгивать вниз.
25_6_bej_s // 4 кирпича, которые пропускают вниз (по сигналу).
26_10_d1_s // dark1
27_14_s1_s // silver1

Чтобы спец-кирпичи работали от Вниз, в скрипте "global.gd", найди функцию
"player_try_collision_1way_spec"
// Чуть поздней, был тэст, и оказалось, что НЕ работает через тайлы.
Поэтому внедрил костыль - там много строчек пришлось поменять.
Суть такова.. если есть сигнал, то стираем тайл, а потом его обратно.
Если надо, чтобы не было заметно, то можно выставить пустой тайл,
в фоновом дубль-тайлмэпе. // или выставлять 24_1_spec для авто-пустышки.


empty0_28 // 28_0_empty // обычный, но пустышка // плюс 7 подобных.
e7_yel_pur // 29_7_yel_pure // empty
e9_blue_n2 // empty
e11_grin_n // empty green

e13_blue_p
e15_bro_n
e17_teal_p
e19_gray_n

LDL36_h // lift-dark // кусочек камня // и для кусочных лифтов.
LDR37_h // правый кусочек-выступ.

L38 // этот овальный кирпич, и 7 подобных - для мостов и особых отметок
L39
L40_gala // псевдо-галактика
L41_sn // змей, как ребро овала

L42_bro // тёмно-коричневый
L43_neon // валун-корыто с неоновым дном
L44 // плюс пара версий валуна
L45

up2_gr_gla // этот и 3 подобных - пропускают вбок, и наверх.
up5_bl_gla
up_dark2
up_silver2

Горизонтальная зеркалка баговая (из-за разности шыри и выси тайла)
(возможно, это можно исправить, но я не собирался зеркалить эти тайлы).

#32
1:13, 12 фев 2021

// ---
Внутри скрипта "global.gd"

# между функциями, регим две переменки..
var body_1way_spec_t := 0 # for TileMap // v105
var body_1way_xy := Vector2()

# и вот код обновлёной функции..
func player_try_collision_1way_spec( p, body, collis_pos: Vector2):
  if body_1way_spec: # если указка занята
    return
  if ! hero1.priv_upr.sig__move_dn(): # sig__priv_shift
    return # нет нужного сигнала

  var flag := 0
  if body is StaticBody2D:
    if body.has_node( "shape_1way_spec"):
      p.add_collision_exception_with( body)
      flag = 1

  elif body is TileMap:
    # костыль
    collis_pos.y += 1.0 # можно и без этого провала.
    collis_pos -= body.global_position
    body_1way_xy.x = collis_pos.x / 64.0
    body_1way_xy.y = collis_pos.y / 48.0

    var tid = body.get_cellv( body_1way_xy)
    #print( "tile id: ", tid, "  collis_pos: ", collis_pos)
    if tid >= 24  and  tid <= 27:
      body_1way_spec_t = tid
      if tid == 24: # "24_1_spec" похож на "empty0_28"
        body.set_cellv( body_1way_xy, 28) # заменили
      else:
        body.set_cellv( body_1way_xy, -1) # убрали тайл
      flag = 1

  if flag:
    body_1way_spec = body
    wait_1way_spec = 1.5
    play_1way_spec = p
#---------


#Кусок рядом, внизу, внутри func player_on_any_process( p, label, delta):

  if body_1way_spec: # v102
    wait_1way_spec -= delta
    if wait_1way_spec < 0.0:

      #{ новый блок
      if body_1way_spec is TileMap  and  body_1way_spec_t > 0:
        # v105
        body_1way_spec.set_cellv( body_1way_xy, body_1way_spec_t)
      else:
        play_1way_spec.remove_collision_exception_with( body_1way_spec)
      body_1way_spec_t = 0
      #}

      play_1way_spec = null
      body_1way_spec = null

// ---
Теперь, дву-кликом, выделим название "player_try_collision_1way_spec",
и вызываем поиск по всем файлам проекта (Меню Search:: Find_in_files).
Жмём там Find, и в нижнем окне, нам показаны три места, где встретили
такое название - нам важны два места, где приставка "g1.".
Новые строки должны выглядеть так..

# Внутри player.gd
g1.player_try_collision_1way_spec( self, cc, s.get_contact_local_position( x))

# Внутри player_kin.gd
g1.player_try_collision_1way_spec( self, cc, sc.position) # v105.
#33
1:32, 13 фев 2021

# glob_lift.gd
var dno = p.spec_half_f # уместно выставлять до 3000.
if dno < 2.0: # v105
  dno = 2.0


# global.gd
# чтобы PlayerKin (KinematicBody2D) взаимо-действовал с хлипкими лифтами.
func is_colliding_player( RigBody: RigidBody2D) -> bool:
  var pl = get_player()
  if ! pl:
    return false
  if pl is PlayerKin:
  #{
    for i in pl.get_slide_count():
      var sc = pl.get_slide_collision( i)
      if sc.collider == RigBody:
        if collid_body_is_player( pl):
          return true
    return false
  #}
  var mcb = RigBody.get_colliding_bodies()
  var t = mcb.size()
  for i in range( t):
    if collid_body_is_player( mcb[ i]):
      return true
  return false
#---------
#34
1:07, 14 фев 2021

// ---
Выправляем, чтобы кинетический игрок (player_kin) ранился о врага.

# enemy.gd
elif cc == Player_: # работает
  glob3.enemy_body_boom( self, Player_, 1) # новая строка
else: # старая строка


# player_kin.gd
  continue # пробуем найти что-то кроме пули.
elif cc is Enemy:
  glob3.enemy_body_boom( cc, self, 1)
  #continue // это не нужно - пример фикса, который создал новый баг


# glob3.gd // добавить в скрипт новую функцию..
func enemy_body_boom( enem, collider_obj, brk_casting: int = 0):
  # _DMG_SYS_
  var an
  if brk_casting:
    g1.unit_break_casting( collider_obj) #

  if enem.war_type == g1.war_type__kos_dmg:
    if enem.dmg_type > 0  and  enem.dmg_min < 0:
      an = g1.unit_take_damage_perc( collider_obj, enem,
      enem.dmg_type,
      g1.get_dmg_v2( enem.dmg_min, enem.dmg_max)) # auto sign
    else:
      an = g1.unit_take_damage_perc( collider_obj, enem,
      g1.dmg_type__fire, 20)
  
  elif enem.poison_body_dmg_min: # косание врага == ранение.
    # здесь, наверно, можно определить место косания.
    # Если оно _ногой_сверху, то надо вызвать
    # an = enem.hp_out( collider_obj, g1.dmg_type__norm, 1)
    # а иначе, получаем урона от монстра..
    if enem.dmg_type > 0  and  enem.dmg_min < 0:
      an = g1.unit_take_damage_perc( collider_obj, enem,
      enem.dmg_type,
      g1.get_dmg_v2( enem.dmg_min, enem.dmg_max)) # auto sign
    # и отдельно для обычного урона..
    elif enem.dmg_type > 0  and  enem.dmg_min > 0:
      an = g1.unit_take_damage( collider_obj, enem,
      enem.dmg_type,
      g1.get_dmg_v2( enem.dmg_min, enem.dmg_max), 0)
  else:
    pass
#---------
#35
14:50, 20 фев 2021

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

#coin_exit.gd
func _process( delta): # v105

  if has_node( "Label"):
    $Label.hide()
    if wait > 0:
      if wait > 3:
        $Label.text = "%d" % int( wait)
        $Label.show()

    elif Need_key == 1:
      if has_node( "Trig"):
        var t = get_node( "Trig").damba + 1
        $Label.text = "%d" % t
        $Label.show()

  if wait > 0:
    wait -= delta
    return

  # ---
  # зона косания придумана для игрока, поэтому проверим здесь
  var pl = g1.get_player()
  if ! pl:
    return

  var mbo = self.get_overlapping_bodies()
  if mbo.size() > 0:
    for i in range( 0, mbo.size()):
      if mbo[ i] == pl:
        body_enter( pl)
        return
#---------


func _on_body_enter( body):
  body_enter( body) # v105
#---------


func body_enter( body): # old name is "_on_body_enter"
#36
0:19, 23 фев 2021
# внутри global.gd  func include_scene__prev_clear():
  body_1way_spec = null # добавить эту строку


// ---
Создам три папки, чтобы распределить количество файлов для локаций.
"h/hf1_k2.gd"
Стартовый город будет без своей саб-папки.


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

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

Некоторые файлы не надо делать в тренировочном варианте.


// функции перехода между локациями ...
// Не надо усложнять.
Когда название точки телепорта "offset", то можно прибавить
к позиции героя офсет старого этапа = проекция в глоб-схему.
Затем отнимаем из глоб-поз-героя офсет нового этапа - вот новая
локальная позиция героя, в новом этапе.

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


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

#37
0:22, 23 фев 2021

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

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

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

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

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

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

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

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

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

- Любой силач можт получить эти дары ?

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

- Как быстро нужно добыть эти 6 даров ?

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

// финиш разговора.
// При этом, все квэсты на 6 даров - со старта игры, лежат в рюкзаке.
// Наверно, финиш разговора проявит возможность взять квэст.

В прототипе, сразу виден предмет нового квэста - можно взять, по жэланию..
Мастер магий (Помошь с философским камнем)..

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

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

#38
17:09, 3 апр 2021
Изображение

v106
https://disk.yandex.ru/d/RnnpAh8jvjBN4g

Исходники для движка "Godot-3" (в архиве, папка "jg_old_a1").
Можно играть-тэстировать глобальный лабиринт - врагов нет, но раны есть.
Условие победы.. получить предмет "мега5".

// ---
Основную работу проводил в папке
jg_old_a1/locations.
Там накопилось много мелких файлов - каждый файл, как мини-локация.

Прошло более 11 месяцев
#39
2:00, 8 мар 2022

// ---
Захотелось продолжать проект. Накопились мысли.
Буду что-нибудь печатать, в теме, чтобы подбодрить себя.

Для главного героя выбрал спрайт монаха (gothicvania church/SPRITES).
Как-минимум, логично - храмы для сохранения своего братана.
Внедрить под камни основы (в локациях храмов) - текстуру "cryo_box".
Много капсул - подпольная секретная начинка.


// ---
Поправил влияние на камеру - цело-численая позиция.

var priv_kamera_to_int := 1 # 1= каждый кадр обрубать дробную часть.
// ...
  if priv_kamera_to_int:
    priv_kamera.position.x = int( priv_kamera.position.x)
    priv_kamera.position.y = int( priv_kamera.position.y)

// ---
Проверил идею фото-фона ... (всё получилось).

"tf_sta1_foto.tscn"
Spatial # важная корневая нода, чтобы вьюпорт сработал (3д --> в 2д).
\ 1-й чилд Viewport, где Camera3D (важно отличить название)
\ 2-й чилд Control, где TexRect для фотки из Viewport.
Суть простая - в первом чилде, тримерные модэльки станут
двумерной фоткой, которую натянем на плакат во втором чилде.
И во втором чилде, добавим кучу плоских спрайтов.
Вся эта сложность, как отдельная сцена, которая
загружается в ноду этапа (ViewRender), при загрузке этапа,
и преврашяется в фотку фона, которую показываем на
любом плоском полигоне (x_far/TexFotoFon).

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

Tile-pipe // делать авто-тайлы для Tilemap
https://aleksandrbazhin.itch.io/tilepipe

SmartShape2D plugin
https://www.youtube.com/watch?v=45PldDNCQhw
https://www.youtube.com/watch?v=r-pd2yuNPvA

#40
2:01, 8 мар 2022

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

Дрон мигает оранж-лампочками (две по бокам), двигается - анимация.
Почему игрок не можт его сбить ?
Вероятно, махаем хлыстом, но тот его не чувствует.
Значит, какая-то абилка нужна (или комбо-эфект) - потом игроку выдают
это, и он можт применять рядом с такими дронами-блокерами.

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

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

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

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

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

#41
2:03, 8 мар 2022

// --- управление
Можно пробануть такое..
1. кнопка прыжка (вероятно, верхния, на гампаде).
2. две кнопки хлыста (вправо-влево)
3. кнопка свободная - умолчанка хитрая - если проверка не нашла
боковых шыфтов, то это и будет переключение компаса на курсор-двиг.

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

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

А когда найден боковой шыфт, значит, 4-я правая кнопка вызывает 1-й
ярлык. Зажатие бокового "ярлык-шыфта" - правые кнопки юзают ярлыки
со 2-го по 5-й - можно подстроить, чтобы по кругу, кнопка 1-го, звала
5-й ярлык, если с шыфтом.
Второй боковой шыфт работает (не шыфтом) Переключателем курсора, как
сказано вышэ про 4-ю кнопку (когда нет боковых кнопок).

Итого..
Ярлык-шыфт и удобный вызов первого ярлыка - это не-обязательные кнопки.
Курсор-переключатель - обязательная кнопка, которая позволяет делать
много ярлыков для абилок - например, 7 или 9 штук, вместо 5.
Для планшэта - все ярлыки можно пальцем нажать - курсор-переключатель
там прячем-отключаем, чтобы не путался.

// Версия постановки точ-зон планшэта..
|хлыст (влево)     хлыст|
|идём (влево)       идём|
|вниз               верх|
|    ярлыки,  и прыжок, в самом правом ярлыке
============ нижний край планшэта

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

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

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

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

     | Назад // здесь, справа, подсказка, мол вернуть пре-экран.
item | (Повторять) // подсказка, мол применять расходник по откату.
     | Применить (Включить-Отключить)
----------
инфо предмета, в нижней части этого фул-скрин-модального окна.
// Лиш у некоторых предметов, есть повторялка по откату - например,
// расходник на усил прыжка.


Ховера нет - надо выбрать пресет мигания, и все кнопки такими сделать.

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

|  кнопка   |
|           |
\====жми====/  # наверно, это и есть кликабельная рамочка. гы-гы.
#42
2:06, 8 мар 2022

// ---
Открваю сцену "locations/a_kino_shab", сохраняю, как tf_sta_kino1,
добавляю пустой скрипт, сохраняю, и ... закрываю весь движок Godot.
Стартую его снова - он быстро закрывается и стартует - выбираю свой
старый проект, где робот бегал - я помню, что там делал кино-сцену.

Открыл 4-й этапчик - это обычный. Открыл 5-й этап - вот он, комикс.
Кликаю по значку скрипта, чтобы мне показали текст - скопировал его
весь - разместил копию тексту в промежуточном файле (редактор Geany)
(всегда открыт, чтобы копи-пастить, и напечатать планировку)

// есть файлы-накопители за 5000 строк - что-то исполнил, и не стёр
// планировку, но большынство - это наброски в пустоту.

Main.gd:: func start_game()
g1.include_scene( "tf_sta_kino1", 1) // внедряю, чтобы сразу кино было.

Стартую проект (одну сцену не могу стартовать - не надёжно), и мне
указывают, что не нашли участника "g1.ijg_page__base2".

Нужно указать номер уникальной страницы. Нахожу "global.gd", чтобы
почитать там константы аля ijg_x, вижу заметку о том, что 101-ый
предмет подразумеваю, как страницу. Открываю сборник предметов
(сцена  items/an_init.tscn), и отмечаю ноду "nb101" - там лиш название
заполнено - надо сделать набросок текста страницы (в свойство Ru_Hint).
"это кладовая-1 первая и единственая страница (1234567890 раз 10)".

Сохраняю an_init, и закрываю эту сцену.
Вспомнил, что английская умолчанка языка - надо найти, где её заменить.
Поиск Find in files - указываю en, и обе галочки ставлю (целое слово).

Скрипт "t_hero.gd", строка 126.
var name_lang_fold = "ru" #"en" # "ru"
// закоментарил, и выставил новые две буквы.

tf_sta_kino1.gd //вернулся в этот файл, и поставил номерок страницы..
g1.current_scene.txt_hint_start( g1.ijg_k1_m1, 1)
// При этом, закоментарил добавку страницы.

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

g1.include_scene( "h/hf2_k2", 1) //просто раскоментил там старую строку.

Ставлю загрузку любой локации (иначе нету тэстов - мёртвый зависон кина)

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

// Прям, как в играх, в стратегиях - надо выбирать правильную
// последовательность исполнения целей - игра в игродела.
// Обший результат недостижым, но отдельные квэсты можно исполнять.
#43
1:19, 12 мар 2022

= хилые тупые враги, рядом со стартом игры (гасим с одного удара).

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

Можно пройти под ним, либо прыгнуть и ударить.

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

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

На них срабатывает кил-тригер - сегмент хлыста вернём, если потеряли.

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

Систематизируем псевдо-врагов..

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

У всех, славность = не меняем.

1. Пустой призрак. // наверно, разные текстуры могут быть.
// Иногда можт быть светляком.
Стоячий, или подвижный вправо-влево (либо свободно летает, в квадрате).
можт-быть кнопкой. // триг-сигнал свободный.
хит-поинты = мизер // лиш хлыстом его раним.
опыт = 0
подарок = 0
кил-тригер = да
репутация = не меняем
ранит = мизер
рана толкает = да (вниз, и рулетка - в какой бок).
// Смысл не сходится - если толкает, то не пустой. Хотя пофиг.


2. Светильник-подсвечник. Разные форм-варианты источника света.
// иногда, качаются, как маятник.
мож-быть кнопкой.
хит-поинты = мало (иногда пара ударов) // лиш хлыстом его раним.
опыт = 0
подарок = мизер
кил-тригер = да
репутация = отнимаем
ранит = наверно, наоборот - мини-подлечка герою.
рана толкает - нет (потому-что возможна подлечка), но маятник,
наверно, обязан быть не проходимым - вытолкать от себя.

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

Некоторым светильникам можно поставить чилда - спаунер огоньков.
Эти огоньки медлено летят, и само-наводятся на героя, игноря врагов.
// Герой не лечится от само-навод-огоньков, имея талант светильников.


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


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


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

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

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


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

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

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

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

#44
1:20, 12 мар 2022

// ---
Копировал картинки из старого проекта.
Менял пикселя в старых текстурах.

Поставил размер шрифтов.. 16, 30, 22 // третий, как средний.

Изображение

Числа - от балды. Примерно так выглядит старт игры.
Вдобавок это экран сохранения игры (из храма) (Храним, вместо Старт).


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

Страницы: 1 2 3 4 Следующая »
ФлеймФорумПроЭкты

Тема в архиве.