Jon Topielski
Jon Topielski
  • 24
  • 495 843
How to make a Scrolling Background in Godot 4
Learn how to quickly make a scrolling, repeating background texture in Godot 4 using a shader.
Code: github.com/jontopielski/Scrolling-Background
Переглядів: 12 521

Відео

Thwack Gameplay Trailer
Переглядів 5 тис.Рік тому
Get the game: jontopielski.itch.io/thwack
Feather Park: Behind the 'Scenes'
Переглядів 2,7 тис.Рік тому
A high level overview of some of the features that went into the making of Feather Park. Game link: jontopielski.itch.io/feather-park Stacked sprite tutorial: ua-cam.com/video/_Z5eg9UvLRw/v-deo.html&ab_channel=JonTopielski Alphons6 palettes: lospec.com/max-mandrych Shoutout to Mellorine who composed the music for the game! 00:00 - Stacked Sprites 01:04 - Color Palette 02:05 - Leaves 03:24 - Min...
Jon Topielski 2022 Games Reel
Переглядів 1,4 тис.Рік тому
The games I worked on in 2022! All made using the Godot engine. Echo Chamber: jontopielski.itch.io/echo-chamber Hearts Ablaze: jontopielski.itch.io/hearts-ablaze Chloroblast: scribblerim.itch.io/chloroblast Cave Buster: jontopielski.itch.io/cave-buster Flipjack: prifurin.itch.io/flipjack Feather Park: jontopielski.itch.io/feather-park Thwack: jontopielski.itch.io/thwack
How to create a Custom Mouse Cursor in Godot
Переглядів 6 тис.2 роки тому
Learn how to implement a custom mouse cursor in Godot. github.com/jontopielski/cursor-tutorial 00:00 - Intro 00:25 - Settings 01:00 - "Software" Mouse 01:27 - Script 02:53 - Pixel Snap 03:18 - Mouse Delay 04:08 - "Hardware" Mouse 04:54 - Window Resolution 06:18 - Scale Multiple 07:25 - Default Cursor 08:02 - Scale It 10:02 - Off By One 10:18 - Outro
How to create a Turn-based Combat System in Godot
Переглядів 88 тис.2 роки тому
Learn how to create a Turn-based Combat system in Godot. Source code: github.com/jontopielski/Turn-Based-Combat Art Assets - limezu.itch.io/fantasy-battlers Background - opengameart.org/content/backgrounds-3 Fonts - www.pentacom.jp/pentacom/bitfontmaker2/gallery/?id=234 and www.pentacom.jp/pentacom/bitfontmaker2/gallery/?id=195 00:00 - Intro 00:15 - Scene Setup 00:44 - Health Bar 03:13 - Panels...
10 Things I Wish I Knew Sooner with Godot
Переглядів 66 тис.2 роки тому
Some beginner friendly tips to help you with Godot. 00:00 - 00:35 Importing pixel art sprites 00:35 - 01:37 Spritesheet in control nodes 01:37 - 02:27 Size flags 02:27 - 02:57 Corner radius 02:57 - 03:51 Pixely look 03:51 - 05:43 Autoloading 05:43 - 06:19 get_tree().change_scene() 06:19 - 07:21 Cubic interpolation 07:21 - 08:16 Modulate 08:16 - 09:06 Color shader 09:06 - 10:10 Default fonts 10:...
Better SFX with Pitch Randomization in Godot
Переглядів 4,6 тис.2 роки тому
Use this simple trick to add more variety to your sound effects. Jump SFX: github.com/jontopielski/Pitch-Randomization/blob/master/audio/Jump.wav Source Code: github.com/jontopielski/Pitch-Randomization Asset Pack Used: pixelfrog-assets.itch.io/pixel-adventure-1 00:00 Intro 00:38 Create Scene 01:23 Script 02:56 Pitch Reroll 04:28 Outro
Stacked Sprites in Godot
Переглядів 20 тис.3 роки тому
Learn how to create stacked sprites in Godot to create a "fake 3d" look. To create sliced sprites, you can use Goxel or MagicaVoxel to create a voxel and then use the "export slices" option. Code: github.com/jontopielski/sprite-stacking-tutorial Car Sprite: github.com/jontopielski/sprite-stacking-tutorial/blob/master/CarSlices.png Car Voxel: github.com/mikelovesrobots/mmmm/blob/master/vox/veh_c...
How to create a Windows 95 interface in Godot
Переглядів 4,8 тис.3 роки тому
Learn to make a Windows 95 interface in Godot. Code: github.com/jontopielski/windows-95-tutorial 00:00 - Intro 00:05 - Scene Setup 00:17 - Taskbar 00:30 - Start Button 01:30 - Divider 02:04 - Time 02:54 - Window 05:04 - Shader 06:47 - Outro
How to create a Game Boy Shader in Godot in 2 minutes
Переглядів 4,7 тис.3 роки тому
Give your games a retro Game Boy aesthetic. Shader: raw.githubusercontent.com/jontopielski/gameboy-shader/master/GameBoy.shader Code: github.com/jontopielski/gameboy-shader 00:00 - Intro 00:10 - Explanation 00:39 - Scene Setup 00:51 - Shader Code 02:12 - Result
How to Move and Animate a 2D Sprite using AnimationTree in Godot
Переглядів 119 тис.3 роки тому
Learn how to move and animate a top down 2d sprite in Godot. I go over basic physics movement, AnimationPlayer, and AnimationTree. Spritesheet: raw.githubusercontent.com/jontopielski/Top-Down-Sprite-Tutorial/master/player/PlayerSpriteSheet.png Code: github.com/jontopielski/Top-Down-Sprite-Tutorial 00:00 - Intro 00:07 - Scene Setup 00:45 - Movement Code 01:44 - Fix Movement 02:11 - AnimationPlay...
How to make a Simple RPG Textbox in Godot
Переглядів 49 тис.3 роки тому
Learn how to make a textbox in Godot. *UPDATE* - at 06:24 connect signal `tween_completed` NOT `tween_all_completed()` AND at 10:09 use `$Tween.remove_all()` instead of `$Tween.stop_all()` code: github.com/jontopielski/rpg-textbox-tutorial
Picking a Game Resolution
Переглядів 27 тис.3 роки тому
Things to think about when picking your game's resolution. Mostly from my personal experience.
How to make a Wavy Text shader in Godot in under 3 minutes
Переглядів 8 тис.3 роки тому
Learn how to make wavy text in Godot. Here's the shader code used in the tutorial: shader_type canvas_item; uniform float height = 3.0; uniform float frequency = 20.0; uniform float speed = 3.0; void vertex() { VERTEX.y = height * sin((frequency * UV.x) (speed * TIME)); }
Cats on Mars OST
Переглядів 1,5 тис.3 роки тому
Cats on Mars OST
Make an Earthbound Shader in Godot in 5 minutes
Переглядів 6 тис.4 роки тому
Make an Earthbound Shader in Godot in 5 minutes
Mafgar Game Music Compilation
Переглядів 3164 роки тому
Mafgar Game Music Compilation
Spinny Discs Gameplay
Переглядів 7264 роки тому
Spinny Discs Gameplay
How to fade transition between scenes in Godot in 5 minutes
Переглядів 28 тис.4 роки тому
How to fade transition between scenes in Godot in 5 minutes
How to make a Simple Menu in Godot in 10 minutes
Переглядів 41 тис.4 роки тому
How to make a Simple Menu in Godot in 10 minutes
This Call May Be Recorded Mouse-Only% Speedrun 5m8s
Переглядів 2934 роки тому
This Call May Be Recorded Mouse-Only% Speedrun 5m8s
Worm Fight from A Midclubber Night's Dream
Переглядів 4124 роки тому
Worm Fight from A Midclubber Night's Dream
Portal Bot Gameplay
Переглядів 6464 роки тому
Portal Bot Gameplay

КОМЕНТАРІ

  • @fuckutony
    @fuckutony 2 дні тому

    i got error expected block in pattern branch, wth this mean 😭😭 9:44

  • @ihevdabestgaminchair
    @ihevdabestgaminchair 5 днів тому

    guys inse=tead of that export use this @export var speed = bla bla bla

  • @ihevdabestgaminchair
    @ihevdabestgaminchair 5 днів тому

    use libresprite (advice for sopmeone looking for sprite/animation making software), free and light

  • @ForTheSuperEarth
    @ForTheSuperEarth 7 днів тому

    For some reason extends is "unexpected" whatever that means.

  • @superfuzzins
    @superfuzzins 11 днів тому

    if this is is to slow for you its still follow-able at 1.5 speed

  • @atrell41
    @atrell41 13 днів тому

    You're the best man, honestly. This video is very well done with fast explinations and no wasting time to get ad revenue and stuff. Respect, respect...

  • @baiacoollegal
    @baiacoollegal 16 днів тому

    K475 slaps bro

  • @gomm888
    @gomm888 17 днів тому

    If anyone is having trouble with the "yield(self, "textbox_closed")" at 11:25 in GoDot 4. I used "await self.textbox_closed" and it worked. My problem was that the game didn't wait for the textbox to close. I hope this helps anyone

  • @zame2476
    @zame2476 18 днів тому

    I want to recreate an ds game and I struggle with the ui because it needs to be pixel perfect. and I do not know if that is possible with godot.

  • @codexaeterna
    @codexaeterna 18 днів тому

    Love this tutorial! FYI, tweening is still in Godot 4, it's just not a node anymore. You can define a tween as a variable now.

  • @Zary04
    @Zary04 18 днів тому

    🌲

  • @Lyxar88
    @Lyxar88 19 днів тому

    Any idea how can I use shader for create curved text?

  • @MegaNano8
    @MegaNano8 20 днів тому

    Thank you very much

  • @MindSweptAway
    @MindSweptAway 25 днів тому

    Since I used Godot 4, I decided to use a timer to make the textbox instead of tweens. But it still helped me a little bit! :D

  • @Finixthegames
    @Finixthegames 27 днів тому

    Muchas gracias! Con esto me ayudaste mucho a mi proyecto +1

  • @Mika43344
    @Mika43344 Місяць тому

    Amazing

  • @GameDevJourney
    @GameDevJourney Місяць тому

    This is so helpful, thank you.

  • @dungeoncorps
    @dungeoncorps Місяць тому

    For anyone on godot 3 - this will work the same way, but your texture repeat setting is not in the TextureRect's node inspector, but rather the import settings of the sprite. Click on your .png file, then go Import > Repeat: Enabled > Reimport.

  • @buzzbuzz20xx
    @buzzbuzz20xx Місяць тому

    Such an amazing video !!!

  • @Literally_batman_69
    @Literally_batman_69 Місяць тому

    It’s very similar to the ost of pikuniku or a hat in time this is amazing work!

  • @kaynex1039
    @kaynex1039 Місяць тому

    Working code for Godot 4.3: extends CanvasLayer @onready var textbox_container = %TextboxContainer @onready var start = %Start @onready var label = %Label @onready var end = %End enum BoxState {READY, READING, FINSIHED} var _cur_state: BoxState = BoxState.READY var _tween: Tween var _text_queue: Array[String] = [] var speed := 40.0 func _ready() -> void: _hide_textbox() add_text("First text queued up!") add_text("Second text queued up!") add_text("Third text queued up!") add_text("Fourth text queued up!") func _process(delta: float) -> void: match _cur_state: BoxState.READY: if !_text_queue.is_empty(): display_text() BoxState.READING: if !_tween.is_running(): label.visible_ratio = 1.0 end.text = "v" change_state(BoxState.FINSIHED) if Input.is_action_just_pressed("ui_accept"): _tween.kill() BoxState.FINSIHED: if Input.is_action_just_pressed("ui_accept"): _hide_textbox() change_state(BoxState.READY) func _hide_textbox() -> void: start.text = "" end.text = "" label.text = "" textbox_container.hide() func _show_textbox() -> void: start.text = "*" textbox_container.show() func change_state(state: BoxState) -> void: _cur_state = state func add_text(next_text: String) -> void: _text_queue.push_back(next_text) func display_text() -> void: var next_text = _text_queue.pop_front() var length = next_text.length() label.visible_characters = 0 label.text = next_text change_state(BoxState.READING) _show_textbox() _tween = create_tween() _tween.tween_property(label, "visible_characters", length, length/speed)

    • @kaynex1039
      @kaynex1039 Місяць тому

      This code does exactly what the video shows. However, I think I should now add: - A signal for proceeding through a textbox, and a signal for emptying the queue. I can see myself awaiting these signals, so a character can say something, then after talking, do something. - A way to "reserve" the textbox, so characters cannot talk over each other, or try to enter a conversation during another conversation. - A bit more control. One thing I have in mind is to end a textbox without input, so a character can be interrupted. - A choice system. Or, a way to talk back. - Effects. Pictures and sounds. Make it a bit more "undertale styled".

  • @ypaut
    @ypaut 2 місяці тому

    truly amazing content

  • @ypaut
    @ypaut 2 місяці тому

    love the aesthetic

  • @RuneDShyznit
    @RuneDShyznit 2 місяці тому

    I know it's an older video but better late than never. Just wanted to let you know I learned more about a lot of core aspects of Godot from this video than many other "beginner's guide" videos. Great job explaining stuff in a practical and useful scenario. Thanks.

  • @Jess-Gonzales
    @Jess-Gonzales 2 місяці тому

    Any sprite stacker that exports to voxel??

  • @the-birbo
    @the-birbo 2 місяці тому

    If you want your UI to move with the camera when it shakes instead of having the camera move past the edges of your UI, create a CanvasItem node and make all your UI nodes children of that node. I have the player panel under a CanvasItem node, but any other UI that you don't want to see past the edges should go there too

  • @Scalpelboy444
    @Scalpelboy444 2 місяці тому

    do you have a tutorial for this that's on unity?

  • @Tanjutsu4420
    @Tanjutsu4420 2 місяці тому

    the frames aren't right unless i use animated sprite2d but the sprite tree only works with sprite 2d

    • @Tanjutsu4420
      @Tanjutsu4420 2 місяці тому

      also apparently $AnimationTree,set("parameters/Idle/blend_position", velocity) isnt working :Expected end of statement after expression, found "," instead.

    • @Tanjutsu4420
      @Tanjutsu4420 2 місяці тому

      it should not be this difficult to use godot

    • @designsbyluis
      @designsbyluis Місяць тому

      @@Tanjutsu4420 you have syntax error its supposed to be $AnimationTree.set("parameters/Idle/blend_position", velocity) but you added a comma after $AnimationTree.

  • @fal_pal_
    @fal_pal_ 2 місяці тому

    No size flags in Godot 4.3? Starts at 1:40

    • @fal_pal_
      @fal_pal_ 2 місяці тому

      I ended up using "Container Sizing" settings to emulate this part of the video

  • @radupatruica7325
    @radupatruica7325 2 місяці тому

    Very helpful, thank you!

  • @Wawa_is_an_cat
    @Wawa_is_an_cat 2 місяці тому

    WE BE GRASPING THE GIYGAS' ATTACK WITH THIS ONE

  • @truenincillo805
    @truenincillo805 2 місяці тому

    Please put RPG game tutorial, slow down basic attacks and skills (not turn-based) replace (turn-based battles) with (time in basic attacks and skills) with (icons-buttons) please tutorial 🙏🙏🙏

  • @TheGameBoyz
    @TheGameBoyz 2 місяці тому

    Perfect! Thank you

  • @Big_Dai
    @Big_Dai 3 місяці тому

    Uh? So, just a common tennis game? What a waste.. considering you have spider-like players with suction feet! Where your player could move around and stretching their legs, only to let go of the rest and snap back to a specific location with the press of a button for reach or added speed/power. You are welcome.

  • @arcad3machine
    @arcad3machine 3 місяці тому

    I'm getting an error that's "invalid assignment of property or key 'value' with value of type 'int' on a base object of type 'null instance'". this is my code: extends Control signal textboxClosed @export var enemy : Resource var currentPlayerHealth = 0 var currentEnemyHealth = 0 func _ready(): setHealth($EnemyContainer/HealthBar, enemy.health, enemy.health) setHealth($PlayerPanel/PlayerData/HealthBar, HealthState.currentHealth, HealthState.maxHealth) $EnemyContainer/Enemy.texture = enemy.texture currentPlayerHealth = HealthState.currentHealth currentEnemyHealth = enemy.health $Textbox.hide() $ActionsPanel.hide() displayText("A wild %s appears!" % enemy.name.to_upper()) await("textboxClosed") $ActionsPanel.show() func setHealth(progressBar, health, maxHealth): progressBar.max_value = maxHealth progressBar.value = health progressBar.get_node("Label").text = "HP: %d/%d" % [health, maxHealth] func _input(event): if Input.is_action_just_pressed("ui_accept") or Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) and $Textbox.visible: $Textbox.hide() emit_signal("textboxClosed") func displayText(text): $Textbox.show() $Textbox/Label.text = text func _on_run_pressed(): displayText("You escaped.") await("textboxClosed") await get_tree().create_timer(.25).timeout get_tree().quit() func enemyTurn(): displayText("%s attacks." % enemy.name) await("textboxClosed") currentPlayerHealth = max(0, currentPlayerHealth - enemy.damage) setHealth($PlayerPanel/PlayerData/HealthBar, currentPlayerHealth, HealthState.maxHealth) displayText("%s dealt %d damage" %[enemy.name, enemy.damage]) $AnimationPlayer.play("shake") enemyTurn() func _on_attack_pressed(): displayText("You attack.") await("textboxClosed") currentEnemyHealth = max(0, currentEnemyHealth - HealthState.damage) setHealth($EnemyContainer/HealthBar, currentEnemyHealth, enemy.health) $AnimationPlayer.play("enemyDamaged") displayText("You dealt %d damage." % HealthState.damage) enemyTurn() Any tips to fix it?

    • @vivalabello
      @vivalabello Місяць тому

      Did you figure it out ?

    • @arcad3machine
      @arcad3machine Місяць тому

      @@vivalabello No :(

    • @vivalabello
      @vivalabello Місяць тому

      @@arcad3machine Upload your project somewhere and give me link I can take a look at it.

  • @WzRd_Gt
    @WzRd_Gt 3 місяці тому

    Tried re-creating the OnScreenKeyboard for my project and when using "OnScreenKeyboard.set_on_screen_input_vector(input_vector)" for the player script, it says "Identifier "OnScreenKeyboard" not declared in the current scope.". Very new to Gdscript and coding in general. I downloaded the source code godot project file from this to see how it works but can't seem to figure out how it works on this end but not on mine.

  • @brotherkito
    @brotherkito 3 місяці тому

    In Godot 4, the margin properties have been moved from the HBoxContainer into the MarginContainer object in case anyone is having trouble following that part.

  • @tekmonster10
    @tekmonster10 3 місяці тому

    where is the size flags in gd4

    • @fal_pal_
      @fal_pal_ 2 місяці тому

      Also trying to find this...

    • @fal_pal_
      @fal_pal_ 2 місяці тому

      I ended up using "Container Sizing" settings, seems to do what the video is demonstrating

    • @tekmonster10
      @tekmonster10 2 місяці тому

      @@fal_pal_ thanks but I already got it

  • @RuthlessMetalYT
    @RuthlessMetalYT 3 місяці тому

    damn I wish I was this good at coding, trying to learn but I'm just too damn stupid haha

  • @ince55ant
    @ince55ant 3 місяці тому

    VERTEX.y += wave_height * sin((wave_frequency * VERTEX.x) + (wave_speed * TIME));

  • @Deathkyun
    @Deathkyun 3 місяці тому

    Thank you so much!

  • @luisfernandosousa81
    @luisfernandosousa81 3 місяці тому

    muito obrigado. Me ajudou bastante a entender essa função. Estava precisando de uma aula assim.

  • @MYNDsEYE
    @MYNDsEYE 4 місяці тому

    How would i take this and trsition a 3d world into this scene?

  • @AppMaker728
    @AppMaker728 4 місяці тому

    They talk about not enough godot tutorials it's plenty

  • @Idkikdhdnbd
    @Idkikdhdnbd 4 місяці тому

    it dosent work , can you help ? , this is my code : extends CanvasLayer const speel_speed = 2 @onready var textbox_container = $textbox_container @onready var lable = $textbox_container/MarginContainer/HBoxContainer/Label @onready var tween = create_tween() enum State { READY, READING, FINISHED } var current_state = State.READY var text_queue = [] func _ready(): $Timer.wait_time = speel_speed _hide_text_box() _queue_text("hello im lara") _queue_text("hello im lara2") _queue_text("hello im lara3") _queue_text("hello im lara4") pass func _process(delta): match current_state : State.READY : if !text_queue.is_empty() : _diplay_text() State.READING : if Input.is_action_just_pressed("move_up") : tween.stop() lable.visible_ratio = 1.0 _change_state(State.FINISHED) State.FINISHED : if Input.is_action_just_pressed("move_up") : _change_state(State.READY) _hide_text_box() func _queue_text(next_text): text_queue.push_back(next_text) pass func _hide_text_box(): lable.text = "" textbox_container.hide() func _show_text_box(): textbox_container.show() func _diplay_text(): var next_text = text_queue.pop_front() _change_state(State.READING) $Timer.start() lable.text = next_text _show_text_box() tween.tween_property(lable , "visible_ratio", 1.0, speel_speed) func _change_state(next_state): current_state = next_state match current_state : State.READY : pass State.READING : pass State.FINISHED : pass func _on_timer_timeout(): $Timer.stop() _change_state(State.FINISHED)

  • @ISamAtlas
    @ISamAtlas 4 місяці тому

    great tutorial, one thing is that it doesn't work in compatability mode, so i was wondering if you had alternatives? im participating in a game jam so i might have the answer tomorrow but its best not to coutn your eggs before they hatch, anwyays thank you, very cool and nice stuff youre doing for the community

  • @antonsimkin
    @antonsimkin 4 місяці тому

    how the hell did he make the original sprite transparent but children visible?

    • @jontopielski6227
      @jontopielski6227 3 місяці тому

      You can set the original child's self modulate alpha value to 0 making it "invisible" but leaving the children visible

  • @antonsimkin
    @antonsimkin 4 місяці тому

    incredible

  • @omgitssome1
    @omgitssome1 4 місяці тому

    amazing! thanks

  • @PesHap
    @PesHap 4 місяці тому

    This is outdated