- 24
- 495 843
Jon Topielski
United States
Приєднався 5 жов 2016
I make videos on the Godot game engine. I also post about games I've worked on.
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
Code: github.com/jontopielski/Scrolling-Background
Переглядів: 12 521
Відео
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)); }
Make an Earthbound Shader in Godot in 5 minutes
Переглядів 6 тис.4 роки тому
Make an Earthbound Shader in Godot in 5 minutes
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
i got error expected block in pattern branch, wth this mean 😭😭 9:44
guys inse=tead of that export use this @export var speed = bla bla bla
use libresprite (advice for sopmeone looking for sprite/animation making software), free and light
For some reason extends is "unexpected" whatever that means.
use @export var speed =
if this is is to slow for you its still follow-able at 1.5 speed
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...
K475 slaps bro
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
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.
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.
🌲
Any idea how can I use shader for create curved text?
Thank you very much
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
Muchas gracias! Con esto me ayudaste mucho a mi proyecto +1
Amazing
This is so helpful, thank you.
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.
Such an amazing video !!!
It’s very similar to the ost of pikuniku or a hat in time this is amazing work!
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)
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".
truly amazing content
love the aesthetic
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.
Any sprite stacker that exports to voxel??
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
do you have a tutorial for this that's on unity?
the frames aren't right unless i use animated sprite2d but the sprite tree only works with sprite 2d
also apparently $AnimationTree,set("parameters/Idle/blend_position", velocity) isnt working :Expected end of statement after expression, found "," instead.
it should not be this difficult to use godot
@@Tanjutsu4420 you have syntax error its supposed to be $AnimationTree.set("parameters/Idle/blend_position", velocity) but you added a comma after $AnimationTree.
No size flags in Godot 4.3? Starts at 1:40
I ended up using "Container Sizing" settings to emulate this part of the video
Very helpful, thank you!
WE BE GRASPING THE GIYGAS' ATTACK WITH THIS ONE
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 🙏🙏🙏
Perfect! Thank you
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.
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?
Did you figure it out ?
@@vivalabello No :(
@@arcad3machine Upload your project somewhere and give me link I can take a look at it.
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.
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.
where is the size flags in gd4
Also trying to find this...
I ended up using "Container Sizing" settings, seems to do what the video is demonstrating
@@fal_pal_ thanks but I already got it
damn I wish I was this good at coding, trying to learn but I'm just too damn stupid haha
VERTEX.y += wave_height * sin((wave_frequency * VERTEX.x) + (wave_speed * TIME));
Thank you so much!
muito obrigado. Me ajudou bastante a entender essa função. Estava precisando de uma aula assim.
How would i take this and trsition a 3d world into this scene?
They talk about not enough godot tutorials it's plenty
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)
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
how the hell did he make the original sprite transparent but children visible?
You can set the original child's self modulate alpha value to 0 making it "invisible" but leaving the children visible
incredible
amazing! thanks
This is outdated