I made a BIG mistake with my indie game

Поделиться
HTML-код
  • Опубликовано: 4 июл 2024
  • What's up, Gamers?
    I really messed up pretty bad with the first pass on my enemy AI system, it legit barely works for what I needed. But that's okay, this video explains how I managed to salvage an otherwise pretty terrible situation!
    The game that I'm developing as an indie game dev is called Isadora's Edge! A 2D Pixel Art platformer game, that I'm developing in the Godot Game Engine! If you're new to Godot or have any questions about Godot or game dev in general, feel free to ask me!
    === THE LOVELY AND TALENTED INSANDIO ===
    SoundCloud: / insandio
    RUclips: ruclips.net/channel/UCCOw...
    === ATTRIBUTIONS ===
    Music used in the background is from the incredibly talented Low Frequency Music!
    Song: 'Good Day' - www.youtube.com/watch?v=lMhoy...
    RUclips Channel: ruclips.net/channel/UC831...
    Soundcloud: / user-551516820
    === HASHTAGS ===
    #GameDev #IndieGame #Godot #GodotEngine #IndieGameDev #Vimjam #8BitsToInfinity #Vimlark #VimJam2 #VimJam2021 #Vimjam2021 #Devlog #GameDevlog #GameJam #GameJamDevlog #Jam #GMTK #GMTKJam2021 #GMTKJAM2022 #Indie #Game #Dev #IndieDev
  • ИгрыИгры

Комментарии • 35

  • @Baekstrom
    @Baekstrom 4 дня назад +24

    State machines are always a headache. You can pretty much make them as finely granular as you want. Finding the right level of abstraction is an artform.
    *Very small states with very simple logic*
    Pro: Very reusable states.
    Cons: State machine complexity explodes exponentially! Transitions between states may need some bespoke logic.
    *Very large states with bespoke behavior*
    Pro: Fine control over behavior in each state through code.
    Cons: Less reusability, and more lines of code need to be written.
    You need to find the right balance between those two extremes. And then there is the implementation of the state machine itself. I've seen quite a few different ways of doing that in my time, and they all have their pros and cons. I'm not sure that the one that is built in to Godot is even the best option available. I guess that the biggest pro of that is that if you are to work together with another Godot developer, then chances are that he/she/them/they is already familiar with it, so there is less of a learning curve.

    • @InboundShovel
      @InboundShovel  4 дня назад +2

      Great analysis, spot on!
      Turns out I leaned way too far into the small reusable states, had to course correct to more bespoke behaviors, haha!

  • @LnkDHr
    @LnkDHr 4 дня назад +9

    Q&A Question: In a past devlog you've talked about the game having four (main) levels. How long do you plan on these levels going to be, and I guess as an extension, what's the goal for the game's overall length?

    • @InboundShovel
      @InboundShovel  4 дня назад +4

      Thanks so much for the question, I'll add it to the list! :D

  • @NoomStuff
    @NoomStuff 4 дня назад +10

    Love how you go into detail about the entire process

    • @InboundShovel
      @InboundShovel  4 дня назад +1

      Thank you so much, I'm glad you like it!

  • @DrTomb
    @DrTomb 4 дня назад +9

    Hey congrats on getting the systems setup the way you like 👍 super big move

    • @InboundShovel
      @InboundShovel  4 дня назад +1

      Thanks so much! :D
      It really does feel good to have easier systems to use - and it's made working on actual level design so much more fun, haha!

  • @sixty5notch796
    @sixty5notch796 4 дня назад +5

    GOD DAMN your pixel art looks great. i cant wait to play!

  • @nilsmuller-cleve6769
    @nilsmuller-cleve6769 2 дня назад +2

    Thanks a lot for making this episode.

    • @InboundShovel
      @InboundShovel  2 дня назад

      No problem, thanks for leaving helpful comments and asking great questions!
      I do define walking distance manually for each instance - or, more accurately, I have the capability to do that! They do have basic edge detection and stuff and default behavior that occurs if I don't override it manually, so it's more of a lever that I can pull if I want to!
      My workflow for playtesting is very fast and loose, so having the ability to change all kinds of parameters on the fly on an individual instance of an enemy is really valuable to me - but once I have ideas set in stone, I'll probably force the generic movement handling in the general EnemyPhysicsController and only override it where I've found it completely necessary, heh
      I'll make sure to keep editor footage in mind for future devlogs, and try to include it whenever I can! :D

  • @La_Mop_Jaune_QC
    @La_Mop_Jaune_QC День назад +1

    i was zoned out on the side half listening to the video in background when i heard "*EDIBLE CHILDREN*" i snapped back for sure . thanks for showing your experience with game developpement !

    • @La_Mop_Jaune_QC
      @La_Mop_Jaune_QC День назад +1

      i just realised , i heard that way wrong. was funny when it happened though

  • @extranji
    @extranji 2 дня назад +1

    Looking forward to the full-length Isadora rap on the OST

  • @johnjohn-sl7oo
    @johnjohn-sl7oo 4 дня назад +4

    amazing devlog and what area is after the plague doctor

    • @InboundShovel
      @InboundShovel  4 дня назад +1

      Thank you so much!
      After the Plague Doctor I'm working on a couple areas, one rooftop area in a big city called the "Shadowed Sky" and an underwater type area (although I don't think I'm gonna change up the physics underwater very much, if at all, haha!)

  • @Stared-vf9eh
    @Stared-vf9eh День назад +1

    Great work!
    As an aspiring game dev, your style and tips are insanely helpfull, keep up the good stuff.

  • @CounterPunchGames
    @CounterPunchGames 3 дня назад +1

    Been working on godot for months, never realized there was an editable children checkbox 😒

    • @NoVIcE_Source
      @NoVIcE_Source 3 дня назад +1

      i cant believe im saying this but godot seems so complicated to me... all this node based approach that godot enforces make it so hard for my programmer oriented brain to grasp-

    • @CounterPunchGames
      @CounterPunchGames 3 дня назад +1

      @@NoVIcE_Source Have you tried it yourself? I'm no expert but from my experience some youtubers tend to complicate it more than they need to.

    • @InboundShovel
      @InboundShovel  2 дня назад

      I was right there with you on that, at first - but once you get into it, the nodes are pretty easy to work with! Just takes some time playing with it to get comfortable, haha!

  • @noontimedreamer
    @noontimedreamer 3 дня назад +1

    I have the same shirt! All the art and the coding you make looks so clean. I get stuck handling my game's enemy AIs for a while too, making them much more complicated than they had to be. What you came up with may just be what I have been looking for too! Thank you so much!

    • @InboundShovel
      @InboundShovel  2 дня назад

      SHIRT TWINS!
      Thank you so much for your comment, and glad my devlog could help you out!
      Just checked out your channel too, and your game is looking good, excited to see more!

  • @HeyYouFromThatGame
    @HeyYouFromThatGame 13 часов назад +1

    Recently found your channel and immediately interested :].

  • @sandfordays
    @sandfordays 4 дня назад +3

    I want to be able to do this in godot, wayyyyyy above me for now XD Love the video!

    • @InboundShovel
      @InboundShovel  3 дня назад

      Thank you, and I'm sure you'll get there! :D

  • @mrtheman5061
    @mrtheman5061 День назад +1

    What engine do you use?

  • @Ouvii
    @Ouvii 3 дня назад

    I don't like the way you talk, but maybe other people do, so I have no problem driving the algorithm by commenting. Good luck.

    • @NoVIcE_Source
      @NoVIcE_Source 3 дня назад +2

      I actually liked the way he talks, it's like hes actually sharing something with the viewer instead of monotonously reading out a script and dilluting his personality with a ton of editing

    • @Ouvii
      @Ouvii 3 дня назад

      @@NoVIcE_Source there it is bois-no longer a maybe.
      I just find some of his affectations to be annoying.

  • @Axforgames
    @Axforgames 3 дня назад +1

    I cant understand the reason for 1:04 nodes although my enemy doesnt attack it movement looks like this
    extends Node3D
    @onready var rootnode = get_parent()
    @onready var originalposition = rootnode.position
    var timer = 0
    var preparetarget = rootnode
    var target = rootnode
    var targetname = ""
    var move_speed = 5
    var localizatetimer
    var stop_distance_near = 0.5
    var stop_distance_far = 15
    func _ready():
    target = rootnode
    print(target)
    func _on_localizateplayer_body_entered(body):
    if body.name == "Player" and not target == body:
    preparetarget = body
    look_at(preparetarget.position)
    rotation_degrees.y += 180
    rotation_degrees.x = 0
    $Animation.play("Taunt")
    func _on_animation_animation_finished(_anim_name):
    target = preparetarget
    func _physics_process(delta):
    if target:
    if target.name == "Player":
    $Animation.play("Atack")
    else:
    $Animation.play("Idle")
    move_towards_target(delta,target)

    timer += 1
    if timer > 120:
    timer = 0
    rootnode.position = Vector3(originalposition.x+randf_range(-9,9),originalposition.y,originalposition.z+randf_range(-9,9))
    func move_towards_target(delta,tarjet):

    look_at(target.position)
    rotation_degrees.y += 180
    rotation_degrees.x = 0

    var distance_to_target = global_transform.origin.distance_to(tarjet.position)

    if distance_to_target < stop_distance_near:
    $Animation.play("Idle")
    return

    if distance_to_target > stop_distance_far and not tarjet == rootnode:
    target = rootnode
    return

    var direction = Vector3(tarjet.position.x - global_transform.origin.x, 0, tarjet.position.z - global_transform.origin.z).normalized()
    var movement = direction * move_speed * delta

    global_transform.origin += movement